首页 > 解决方案 > 用户警告:Pandas 不允许通过新属性名称创建列

问题描述

我被我的熊猫脚本困住了。

实际上,我正在使用两个 csv 文件(一个输入文件和另一个输出文件)。我想复制两列的所有行并想要进行计算,然后将其复制到另一个数据框(输出文件)。

列如下:

'lat', 'long','PHCount', 'latOffset_1', 'longOffset_1','PH_Lat_1', 'PH_Long_1', 'latOffset_2', 'longOffset_2', 'PH_Lat_2', 'PH_Long_2', 'latOffset_3', 'longOffset_3','PH_Lat_3', 'PH_Long_3',  'latOffset_4', 'longOffset_4','PH_Lat_4', 'PH_Long_4'.

我想取列 'lat' 和 'latOffset_1' ,进行一些计算并将其放入我已经创建的另一个新列('PH_Lat_1')中。

我的功能是:

def calculate_latoffset(latoffset):  #Calculating Lat offset.
    a=(df2['lat']-(2*latoffset))
    return a

主要代码:

for i in range(1,5):
        print(i)
        a='PH_lat_%d' % i 
        print (a)
        b='latOffset_%d' % i
        print (b)
        df2.a = df2.apply(lambda x: calculate_latoffset(x[b]), axis=1)

由于列名仅相差 (1,2,3,4)。所以我想调用函数 calculate_latoffset 并一次性计算所有列(PH_Lat_1、PH_Lat_2、PH_Lat_3、PH_Lat_4)的所有行。

使用上面的代码时,我收到此错误:

basic_conversion.py:46: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
  df2.a = df2.apply(lambda x: calculate_latoffset(x[b]), axis=1)

可能吗 ?请帮助

标签: pythonpandasdataframeindexinglambda

解决方案


只需使用df2['a']而不是df2.a


推荐阅读