根据变量设置熊猫数据框的列值

时间:2019-08-30 04:06:59

标签: python pandas

我有以下数据框:

    col1   col2
0    a      7                    
1    b      3                  
2    c      1                  
3    d      6                  

我正在尝试向数据框添加新列,其值等于变量x。此变量将取决于col1col2的值。我尝试过:

for row in df:
    row['col3'] = x

但是我遇到以下错误:

TypeError: 'tuple' object does not support item assignment

我看了看 iterrows(),但是我不确定这是正确的方法。根据文档:

  

“永远不要修改要迭代的内容。不能保证在所有情况下都能正常工作。根据数据类型,迭代器将返回副本而不是视图,并且对其进行写入将无效。”

编辑-其他信息:

我想做的是创建一个新的数据框,其中col3是基于数据框的预排序顺序的字符串。例如,以下数据框:

    col1   col2
0    a      7                    
1    b      3                  
2    c      1                  
3    d      6                  

应成为:

    col1   col2   col 3 
0    a      7      001              
1    b      3      002            
2    c      1      003            
3    d      6      004            

col3是格式为'000'的字符串(即,在适用情况下使用前导零,因此该字符串始终包含3个字符)。数据框中的行数永远不会超过999。

这是我到目前为止的代码:

x = 1

for row in df:

    if x < 10:
        formatting = str('00' + str(x))
    elif x < 100:
        formatting = str('0' + str(x))
    else:
        formatting = str(str(x))

    x += 1

    row['col3'] = x

但是,这似乎更改了数据框中所有行的col3值,仅改变了循环中的行。例如,在4个循环之后,结果为:

    col1   col2   col 3 
0    a      7      004              
1    b      3      004            
2    c      1      004            
3    d      6      004            

1 个答案:

答案 0 :(得分:1)

编辑:

这里最好使用Series.str.zfill,并将索引值转换为字符串:

df['col3'] = (df.index + 1).astype('str').str.zfill(3)
print (df)
  col1  col2 col3
0    a     7  001
1    b     3  002
2    c     1  003
3    d     6  004

如果索引不是默认的RangeIndex,则创建帮助器Series

df['col3'] = pd.Series(np.arange(1, len(df) + 1)).astype('str').str.zfill(3)