Python 应用函数中的动态dataframe列名

Python 应用函数中的动态dataframe列名,python,pandas,Python,Pandas,我正在使用当前的数据帧: 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','on

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

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'>

以下是完整的错误消息:

回溯(最后一次调用):在主模板场景[columnName]=templateScenarios[columnName]=templateScenarios[columnName]的第57行main()文件“stage1.py”的第112行文件“stage1.py”。在apply-mapped=lib.map\u的第2355行,apply(“,”.join)文件“/Users/aplo.siskos/anaconda3/lib/python3.6/site-packages/pands/core/series.py”(值,f,convert=convert\u dtype)文件“pandas/\u libs/src/inference.pyx”,第1574行,在pandas.\u libs.lib.map\u inference TypeError:序列项0:预期的str实例,找到浮点


存在问题
NaN
s值,因此可以通过
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

您的解释器分别使用哪些版本的python和pandas?请包含完整的错误消息。@PaulH python 3.6.3和pandas 0.20.3都使用?您确定吗?@PaulH是的。我在控制台中键入了python3,得到了第一个版本。我在脚本中打印了这一版本:
pd.\uu version\uuuuu
并得到了第二个版本。为什么这不包括我呢h?
df2=df2.fillna('none')
它将
NaN
none
替换为string
none
。您的解决方案应该可以工作,但它不缺少值,只缺少字符串。我之前的一个问题返回了每个单元格中的列表。这就是我尝试上述解决方案的原因。现在,使用您的x.dropna()我不再需要它:)谢谢,你来了
unique
return
np.array
,因此必须
join