一般情况下,程序读取表格的思路是按列读取并处理。假如我们现在需要按行读取Excel表格数据并处理(将结果置于另一个表格中),应该如何做呢?这里为大家给出一个例子,这里按行读取-->处理-->写入的思路以供参考。
使用库:pandas, numpy
Python版本:13.1
在原始表格里,我们有一些经纬度坐标的数据:(这里的坐标为海淀区附近的一些坐标,无实际含义)
现在已有一个转换坐标的函数(存于Lat2Mercator.py文件中),函数Lat2Mercator需要两个输入:经度和纬度,并输出一个列表[x,y],分别表示转换后的墨卡托坐标。
import numpy as np
earthRad = 6378137.0 # 地球半径
def Lat2Mercator(lng, lat):
x = lng * np.pi / 180 * earthRad
a = lat * np.pi / 180
y = earthRad / 2 * np.log((1 + np.sin(a)) / (1.0 - np.sin(a)))
return [x,y]
按行读取表格中的数据,每行处理之后直接写入墨卡托坐标.xlsx文件中:
import numpy as np
import pandas as pd
from Lat2Mercator import Lat2Mercator
file_name = "经纬度坐标.xlsx"
data = pd.read_excel(file_name, header = 0, usecols = [0,1])
data = data.to_numpy() # DataFrame转换为numpy数组形式
lng = data[:, :1] # 经度
lat = data[:, 1:] # 纬度
# 创建写入的新表格信息
x, y = Lat2Mercator(lng, lat)
# 将经纬度的两列信息拼接为一个矩阵
Mer_xy = np.hstack((x, y))
# 创建输出墨卡托坐标的Excel表格
name = pd.DataFrame(columns=['x', 'y'])
name.to_excel('墨卡托坐标.xlsx', index=False)
print("墨卡托坐标.xlsx文件已创建成功!")
data_out = pd.DataFrame(Mer_xy)
writer = pd.ExcelWriter('墨卡托坐标.xlsx', engine='openpyxl', mode='a', if_sheet_exists='overlay')
data_out.to_excel(excel_writer=writer, sheet_name='Sheet1', startrow=1, startcol=0, header=False, index=False)
writer._save()
print("写入完成")
运行结果:
以上就完成了对Excel表格的按行读取和处理。
希望本期内容的思路和方法对大家有所帮助。祝大家学习愉快!