2017-07-31 89 views
0

我有一个单一行的熊猫数据框。我想同时添加一列名为new_cols的列,并将它们的所有值设置为0.熊猫:将特定列设置为0

是否有直接的方法可以做到这一点?

我尝试:

article_features[new_cols] = 0但是,这并不工作:(

感谢

+0

什么是'new_cols'的数据类型? – DyZ

+0

@DYZ这是一个字符串 – bclayman

+0

_list_从哪里来,然后呢? – DyZ

回答

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

我们可以用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 
+0

OP声明'new_cols'是一个字符串。 – DyZ

+0

@DYZ对不起,'new_cols'是'unicode'... – bclayman

0

您可以在一个循环中添加列:

for col in new_cols: 
    df[col] = 0