我的数据框中填充了几列。我需要更改数据规范化的列值,如下例所示:
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'
答案 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
。
然后我只是使用赋值运算符来指定“非空”的值,就像你想要的那样。
如果您希望新列包含“非空”,那么您不会在mycolumn
中污染原始数据,您可以这样做:
df.loc[df['mycolumn'] != 0, 'myNewColumnsName'] = 'not empty'
答案 1 :(得分:3)
最简单的是使用:
df['User_id'] = df['User_id'].replace('0', 'is not empty')
如果0
为int
:
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')