首页 文章

应用函数中的动态数据帧列名称

提问于
浏览
1

我正在使用当前的数据帧:

df = pd.DataFrame({'columnA':[1111,1111,2222,3333,4444,4444,5555,6666],
                   'columnB':['AAAA','AAAA','BBBB','AAAA','BBBB','BBBB','AAAA','BBBB'],
                   'columnC':['one','two','one','one','one','sales','two','one'],
                   'NUM1':[1,3,5,7,1,0,4,5],
                   'NUM2':[5,3,6,9,2,4,1,1],
                   'W':list('aaabbbbb')})

我试图在以下代码中使用动态列:

#First aggregate the data
d = {'columnB':'unique', 'columnC':'unique' }
df2 = df.groupby('columnA').agg(d)


#Convert list to string for each cell of the inventory field
mylist = ["columnB","columnC"]
for x in mylist:
    columnName = x
    #print("df2."+columnName+".apply(', '.join)")
    df2[columnName] = df2[columnName].apply(', '.join)

它在Jupyter中运行良好 . 我的问题是,当我在visualstudio上运行它时,它不起作用 . 我收到此错误:

序列项0:预期的str实例,浮点数找到

打印数据帧的类型后,我得到这个:

<class 'pandas.core.frame.DataFrame'>

这是完整的错误消息:

回溯(最近一次调用最后一次):文件“stage1.py”,第112行,在main()文件“stage1.py”,第57行,在主模板中[columnName] = templateScenarios [columnName] .apply(',' .join)文件“/Users/apolo.siskos/anaconda3/lib/python3.6/site-packages/pandas/core/series.py”,第2355行,在apply mapped = lib.map_infer中(values,f,convert = convert_dtype)文件“pandas / _libs / src / inference.pyx”,第1574行,在pandas._libs.lib.map_infer中TypeError:序列项0:预期的str实例,找到了float

1 回答

  • 1

    有问题 NaN 的值,因此可以通过 dropna 删除它们并使用自定义函数 join

    df = pd.DataFrame({'columnA':[1111,1111,2222,3333,4444,4444,5555,6666],
                       'columnB':[np.nan,np.nan,'BBBB','AAAA','BBBB','BBBB','AAAA','BBBB'],
                       'columnC':['one','two','one','one','one','sales','two','one'],
                       'NUM1':[1,3,5,7,1,0,4,5],
                       'NUM2':[5,3,6,9,2,4,1,1],
                       'W':list('aaabbbbb')})
    
    f = lambda x: ', '.join(x.dropna().unique())
    d = {'columnB': f, 'columnC':f}
    df2 = df.groupby('columnA').agg(d)
    print (df2)
            columnB     columnC
    columnA                    
    1111               one, two
    2222       BBBB         one
    3333       AAAA         one
    4444       BBBB  one, sales
    5555       AAAA         two
    6666       BBBB         one
    

相关问题