我需要清理一个 Dataframe ,它的列来自不同的源,具有不同的类型。这意味着我可以有,例如,包含“nan”,“none”,“NULL”的字符串列,(作为字符串而不是None值)。
我的目标是找到所有的空值并将其替换为None。
for column in df.columns:
for idx, row in df.iterrows():
if (str(row[column]).lower() == "none") or if (str(row[column]).lower() == "nan") or (str(row[column]).lower() == "null"):
df.at[row.name, column] = None
但这显然不是最好或最快的方法。我怎样才能利用Pandas运算或列表解析来做这个替换呢?谢谢!
4条答案
按热度按时间umuewwlo1#
如果您想使用numpy,也可以这样做(如果字段中的值确实是字符串)
agxfikkp2#
快速、轻松的优化:
不需要将
row[column]
转换为str
,然后对每个字符迭代3次。短代码:
甚至更短(我猜你期待的是一个数字)和更优化:
holgip5t3#
这似乎是一个有争议的主题(例如,参见本线程),但人们经常说列表解析比for循环在计算上更高效,尤其是在panda Dataframe 上迭代时。
我也更喜欢在风格上使用列表解析,因为它导致嵌套循环/if语句的缩进级别更少。
以下是您的使用案例的外观:
v7pvogib4#
简单方法,使用
isin
和mask
:或者,如果要就地更新:
输出量: