仅当行值为特定字符串时才删除具有重复列名的列
remove columns with duplicated column names only if row values are a certain string
我需要删除具有重复名称的列,但只删除所有行值为 '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
我需要删除具有重复名称的列,但只删除所有行值为 '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