带有标量的数据帧中值的乘法

时间:2019-05-12 09:00:34

标签: python pandas

我正在研究一个要将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')'是无效的密钥

**

1 个答案:

答案 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) 

这也适用于您的下一行。解决此问题后,您可能会遇到更多错误。