我正在使用熊猫,并且想从列表中向我的数据框添加列。理想情况下,我想遍历for循环中的列表,并在每次遍历中创建单个列。
import pandas as pd
d = {
'name':['Ken','Bobby'],
'age':[5,6],
'score':[1,2]}
df = pd.DataFrame(d,columns=['name','age','score'])
new_columns = ['col1', 'col2']
name age score
Ken 5 1
Bobby 6 2
name age score col1 col2
Ken 5 1 1 1
Bobby 6 2 2 2
for i in new_columns:
df[i] = pd.Series([1,2])
我已经更正了用于修正拼写错误的代码,但是还有一个很棒的附加解决方案,该解决方案不用于将来打算使用的循环。
答案 0 :(得分:2)
一种没有for循环的方法,assign
df=df.assign(**dict.fromkeys(new_columns,[1,2]))
df
Out[84]:
name age score col1 col2
0 Ken 5 1 1 1
1 Bobby 6 2 2 2
在创建新列时,您也不需要Series
for i in new_columns:
df[i] = [1,2]
df
Out[86]:
name age score col1 col2
0 Ken 5 1 1 1
1 Bobby 6 2 2 2
注意,个人不建议使用Series
进行分配,因为pandas
是索引敏感的,这意味着当您的数据框索引不在0-n范围内时,分配将失败。例如
df.index=[100,101]
for i in new_columns:
df[i] = pd.Series([1,2])
df
Out[89]:
name age score col1 col2
100 Ken 5 1 NaN NaN
101 Bobby 6 2 NaN NaN