我正在研究一个要将X和Y像素值转换为物理坐标的问题。我有一个包含许多csv文件的巨大文件夹,我将它们加载,传递给我的函数,计算坐标并覆盖列并返回数据框。然后,我将其覆盖在函数之外。我有可以正确执行的公式,但是在python中实现时遇到一些问题。
每个CSV文件都有很多列。我感兴趣的列是纬度(度),经度(度),XPOS和YPOS。前两个是空白,后两个具有我需要用来填充前两个的数据。
import pandas as pd
import glob
max_long = float(XXXX)
max_lat = float(XXXX)
min_long = float(XXXX)
min_lat = float(XXXX)
hoi = int(909)
woi = int(1070)
def pixel2coor (filepath, max_long, max_lat, min_lat, min_long, hoi, woi):
data = pd.read_csv(filepath) #reading Csv
data2 = data.set_index("Log File") #Setting index of dataframe with first column
data2.loc[data2['Longitude (degree)']] = (((max_long-min_long)/hoi)*[data2[:,'XPOS']]+min_long) #Computing Longitude & Overwriting
data2.loc[data2['Latitude (degree)']] = (((max_lat-min_lat)/woi)*[data2[:,'YPOS']]+min_lat) #Computing Latitude & Overwriting
return data2 #Return dataframe
filenames = sorted(glob.glob('*.csv'))
for file in filenames:
df = pixel2coor (file, max_long, max_lat, min_lat, min_long, hoi, woi) #Calling pixel 2 coor function and passing a csv file in every iteration
df.to_csv(file) #overwriting the file with the dataframe
我收到以下错误。
**
TypeError:'(slice(None,None,None),'XPOS')'是无效的密钥
**
答案 0 :(得分:0)
在我看来,您的语法已关闭。在以下行中:
data2.loc[data2['Longitude (degree)']] = (((max_long-min_long)/hoi)*[data2[:,'XPOS']]+min_long) #Computing Longitude & Overwriting
等式的左侧似乎是在指一列,但是您将其放在.loc slicer的'row'部分中。因此应该是:
data2.loc[:, 'Longitude (degree)']
在等式的右侧,您忘记了.loc或需要删除':',因此有两种可能的解决方案:
(((max_long-min_long)/hoi)*data2.loc[:,'XPOS']+min_long)
(((max_long-min_long)/hoi)*data2['XPOS']+min_long)
此外,我要补充一点,您在右侧的括号应更明确。尚不清楚您希望标量如何作用于序列。您要先添加min_long吗?还是先乘((((max_long-min_long)/ hoi))?
您的最后一行可能看起来像这样,首先以加法为例:
data2.loc[:, 'Longitude (degree)'] = ((max_long-min_long)/hoi)*(data2.loc[:,'XPOS']+min_long)
这也适用于您的下一行。解决此问题后,您可能会遇到更多错误。