更改pandas dataframe列

时间:2017-10-19 12:46:26

标签: python pandas dataframe

我的数据框中填充了几列。我需要更改数据规范化的列值,如下例所示:

User_id   
751730951     
751730951
0
163526844
...and so on

我需要将a中不为0(字符串)的列中的每个值替换为“is not empty”之类的内容。我已经尝试了几个小时,但仍然无法将每个不是0的值更改为其他值。替换() - 函数不能正常工作。一些好主意?

编辑(我的解决方案):

finalResult.loc[finalResult['update_user'] == '0', 'update_user'] = 'empty'
finalResult.loc[finalResult['update_user'] != 'empty', 'update_user'] = 'not empty'

3 个答案:

答案 0 :(得分:3)

df.loc[df['mycolumn'] != '0', 'mycolumn'] = 'not empty'

或者如果值是int,

df.loc[df['mycolumn'] != 0, 'mycolumn'] = 'not empty'

df.loc[rows, cols]可让您在DataFrame中获取或设置一系列值。第一个参数是行,在这种情况下,我使用布尔掩码来获取mycolumn中没有0的所有行。第二个参数是您要获取/设置的列。由于我正在替换我查询的同一列,因此它也是mycolumn

然后我只是使用赋值运算符来指定“非空”的值,就像你想要的那样。

包含'not empty'的新列

如果您希望新列包含“非空”,那么您不会在mycolumn中污染原始数据,您可以这样做:

df.loc[df['mycolumn'] != 0, 'myNewColumnsName'] = 'not empty'

答案 1 :(得分:3)

最简单的是使用:

df['User_id'] = df['User_id'].replace('0', 'is not empty')

如果0int

df['User_id'] = df['User_id'].replace(0, 'is not empty')

答案 2 :(得分:0)

假设我们使用一个系列,其中包含问题中指定的数据,名为user_id,只需一行即可:

user_id.where(user_id == 0).fillna('is not empty')

我不太喜欢loc,因为我认为它使阅读变得复杂。

它可能比替换更好,因为它允许相反的情况:

user_id.where(user_id != 0).fillna('is empty')