Pandas拼接两列为新ID列时单列为空结果为空该如何解决
问题原因
pandas 默认的字符串运算规则中,只要参与+拼接的两个值任意一个为NaN(空值),运算结果就会直接返回NaN,所以才会出现只有两列都有值时才正常拼接的情况。
解决方法
方法1:先填充空值再拼接
提前把两列的空值替换为空字符串,再用+拼接即可:
import pandas as pd f = pd.read_csv('file.csv') # 填充空值后拼接 f['userID'] = f['destinationUserName'].fillna('') + f['sourceUserName'].fillna('') keep_col = ['@timestamp', 'message', 'name', 'destinationUserName', 'sourceUserName', 'userID'] new_f = f[keep_col] new_f.to_csv("newFile.csv", index=False)
方法2:用str.cat()方法(更适合字符串拼接场景)
pandas 字符串专属的cat()方法可以直接指定空值的默认替换值,代码更简洁:
# na_rep参数指定空值替换为对应的内容 f['userID'] = f['destinationUserName'].str.cat(f['sourceUserName'], na_rep='')
注意事项
- 注意核对CSV表头和代码中调用的列名大小写是否完全一致,你给出的CSV表头是
DestinationUsername、sourceUsername,如果大小写不匹配会导致读取不到列、整列为空,也会触发相同的异常结果。 - 如果需要两列同时为空时
userID显示自定义内容,可以在拼接后再加一步填充:f['userID'] = f['userID'].replace('', '未知'),引号内的内容可以按需修改。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

