在pandas中循环concat的问题

时间:2018-02-01 20:18:17

标签: python pandas

我试图将一些虚拟变量列添加到for循环中的数据库列表中,但是当代码在循环外部按预期工作时,它在循环内部时不起作用。这是一个最小的工作示例 - 当在循环中打印df时它具有预期的形式,但是然后在循环外调用df1和df2它们没有额外的列。

import pandas as pd
df1=pd.DataFrame({'A':['a','b','c']})
df2=pd.DataFrame({'A':['b','c','b']})
combine=[df1,df2]
for df in combine:
    df=pd.concat([df,pd.get_dummies(df['A'])],axis=1)
    print(df)
print(df1)
df1=pd.concat([df1,pd.get_dummies(df1['A'])],axis=1)
print(df1)

   A  a  b  c
0  a  1  0  0
1  b  0  1  0
2  c  0  0  1

   A  b  c
0  b  1  0
1  c  0  1
2  b  1  0

   A
0  a
1  b
2  c

   A  a  b  c
0  a  1  0  0
1  b  0  1  0
2  c  0  0  1

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在循环之后,df1df2没有区别,因为在循环内你只需将参考df更改为指向全新的对象,即

的结果
pd.concat([df,pd.get_dummies(df['A'])],axis=1)

df1df2引用的对象不会自行更改。

尝试替换

df = pd.concat([df,pd.get_dummies(df['A'])],axis=1)

df[df['A'].unique()] = pd.get_dummies(df['A'])

你会发现差异。