如何在for循环内的pandas数据框中创建其他列

时间:2019-02-13 23:53:16

标签: python pandas data-cleaning

我正在使用熊猫,并且想从列表中向我的数据框添加列。理想情况下,我想遍历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])

编辑:

我已经更正了用于修正拼写错误的代码,但是还有一个很棒的附加解决方案,该解决方案不用于将来打算使用的循环。

1 个答案:

答案 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