python - 仅当行值是某个字符串时才删除具有重复列名的列
问题描述
我需要删除名称重复的列,但只删除所有行值为“nan”(作为字符串,而不是 NaN)的重复项。示例数据和预期输出如下。非常感谢!
df = pd.DataFrame({'id':[1,2,3,4],'a':[0,0,0,'nan'], 'b':['nan','nan','nan','nan'], 'c':['nan','nan','nan','nan'], 'd':[1,'nan',0,2]})
df = df.rename(columns = {'a':'a','b':'a', 'c':'b', 'd':'b'})
id a a b b
0 1 0 nan nan 1
1 2 0 nan nan nan
2 3 0 nan nan 0
3 4 nan nan nan 2
预期产出
id a b
0 1 0 1
1 2 0 nan
2 3 0 0
3 4 nan 2
解决方案
问题是,如果您想保留空的但唯一的列。如果不是,你可以在一行中解决它:df1 = df.dropna(how='all', axis='columns')
如果你想保留它们,你可以删除它们然后重新创建它们,因为它们本质上只是空的。
输入:
df = pd.DataFrame({'id':[1,2,3,4],'a':[0,0,0,np.nan], 'b':[np.nan,np.nan,np.nan,np.nan], 'c':[np.nan,np.nan,np.nan,np.nan], 'd':[1,np.nan,0,2], 'e':[np.nan,np.nan,np.nan,np.nan]})
df = df.rename(columns = {'a':'a','b':'a', 'c':'b', 'd':'b'})
代码:
df1 = df.dropna(how='all', axis='columns').copy()
df1[list(df.columns.difference(df1.columns))] = np.nan
出去:
# id a b e
# 0 1 0.0 1.0 NaN
# 1 2 0.0 NaN NaN
# 2 3 0.0 0.0 NaN
# 3 4 NaN 2.0 NaN
推荐阅读
- c# - 从 StreamReader 到 List 的数组字符串
在 C# 中 - python - 获取属于某个模型的开发人员
- c - 如何找到两个区间之间的素数?我做了一个,但这不起作用
- javascript - 我有一个分页问题,将其与 nanoscroller 相结合
- javascript - 填充其他文本框后删除所需属性
- reactjs - 反应更清洁的方式来提升状态
- arrays - 致命错误:索引超出范围 / UIPickerView /Array/ Swift
- flutter - Flutter Animated Builder with Provider 以显示来自 URL 的图像
- firebase - Flutter Firebase Analytics 电子商务购买
- python - 使用 python 请求库的帖子上传 tarfile