我试图将一些虚拟变量列添加到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
感谢您的帮助。
答案 0 :(得分:0)
在循环之后,df1
或df2
没有区别,因为在循环内你只需将参考df
更改为指向全新的对象,即
pd.concat([df,pd.get_dummies(df['A'])],axis=1)
df1
或df2
引用的对象不会自行更改。
尝试替换
df = pd.concat([df,pd.get_dummies(df['A'])],axis=1)
与
df[df['A'].unique()] = pd.get_dummies(df['A'])
你会发现差异。