Pandas:将特定列设置为0

时间:2017-07-31 20:10:28

标签: python pandas

我有一行Pandas数据帧。我想同时添加一个名为new_cols的列列表,并将它们的所有值设置为0.

有这么简单的方法吗?

我的尝试:

article_features[new_cols] = 0但这不起作用:(

谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以使用assign方法。

演示:

In [43]: df
Out[43]:
   a  b  c
0  1  2  3
1  4  5  6

In [44]: new_cols
Out[44]: ['c1', 'c2', 'c3']

选项1:

In [46]: df = df.assign(**{c:0 for c in new_cols})

In [47]: df
Out[47]:
   a  b  c  c1  c2  c3
0  1  2  3   0   0   0
1  4  5  6   0   0   0

选项2:

In [106]: df = df.join(pd.DataFrame(0, df.index, new_cols))

In [107]: df
Out[107]:
   a  b  c  c1  c2  c3
0  1  2  3   0   0   0
1  4  5  6   0   0   0

添加字符串值:

In [49]: df = df.assign(**{c:'0' for c in new_cols})

In [50]: df
Out[50]:
   a  b  c c1 c2 c3
0  1  2  3  0  0  0
1  4  5  6  0  0  0

In [51]: df.dtypes
Out[51]:
a      int64
b      int64
c      int64
c1    object
c2    object
c3    object
dtype: object

答案 1 :(得分:2)

使用pd.DataFrame.reindex_axisfill_value=0参数。

df.reindex_axis(df.columns.union(new_cols), axis=1, fill_value=0)

   a  b  c  c1  c2  c3
0  1  2  3   0   0   0
1  4  5  6   0   0   0

或者对于字符串使用fill_value='0'

df.reindex_axis(df.columns.union(new_cols), 1, fill_value='0')

   a  b  c c1 c2 c3
0  1  2  3  0  0  0
1  4  5  6  0  0  0

<强>设置
我从@MaxU借来了物品

df = pd.DataFrame({'a': [1, 4], 'b': [2, 5], 'c': [3, 6]})
new_cols = ['c1', 'c2', 'c3']

答案 2 :(得分:0)

您可以在循环中添加列:

for col in new_cols:
    df[col] = 0