当所有子列完全空白时如何删除 pandas 多级数据框列
how to drop a pandas multi level dataframe column when all sub columns are completely blank
数据帧:
|--------------------------------------------------------------------|
| Name | email | Phone no | Gender |
|----------------|-------------------|--------------|----------------|
|legacy | target |legacy | target |legacy|target |legacy | target |
|-------|--------|----------|--------|------|-------|-------|--------|
|Name1 |Name1 |n1@abc.com| | | | | |
|Name2 |Name2 | | | | 12 | | |
|--------------------------------------------------------------------|
预期输出:
|---------------------------------------------------|
| Name | email | Phone no |
|----------------|-------------------|--------------|
|legacy | target |legacy | target |legacy|target |
|-------|--------|----------|--------|------|-------|
|Name1 |Name1 |n1@abc.com| | | |
|Name2 |Name2 | | | | 12 |
|---------------------------------------------------|
我正在使用以下代码,但它也删除了“电子邮件目标”和“phone 无遗留”列。
df.dropna(how='all', axis=1, inplace=True)
但是我只想删除“性别”列,因为这是唯一一个旧字段和目标字段都完全空白的列。
谁能帮帮我。
谢谢。
尝试(我假设空单元格是 NaN):
m=df.isna().all().unstack(level=1)
cols=m[m.all(1)].index.tolist()
最后使用get_level_values()
:
df=df.loc[:, ~df.columns.get_level_values(0).isin(cols)]
df
的输出:
Name Email Phone no
Legecy Target Legecy Target Legecy Target
0 Name1 Name1 n1@abc.com NaN NaN NaN
1 Name1 Name2 NaN NaN NaN 12
尝试(我假设空单元格是字符串 ""
):
m = (~df.eq("").all().groupby(level=0).all()).eq(True)
x = df.loc[:, m.index[m]]
print(x)
打印:
Name Phone no email
legacy target legacy target legacy target
0 Name1 Name1 n1@abc
1 Name2 Name2 12
数据帧:
|--------------------------------------------------------------------|
| Name | email | Phone no | Gender |
|----------------|-------------------|--------------|----------------|
|legacy | target |legacy | target |legacy|target |legacy | target |
|-------|--------|----------|--------|------|-------|-------|--------|
|Name1 |Name1 |n1@abc.com| | | | | |
|Name2 |Name2 | | | | 12 | | |
|--------------------------------------------------------------------|
预期输出:
|---------------------------------------------------|
| Name | email | Phone no |
|----------------|-------------------|--------------|
|legacy | target |legacy | target |legacy|target |
|-------|--------|----------|--------|------|-------|
|Name1 |Name1 |n1@abc.com| | | |
|Name2 |Name2 | | | | 12 |
|---------------------------------------------------|
我正在使用以下代码,但它也删除了“电子邮件目标”和“phone 无遗留”列。
df.dropna(how='all', axis=1, inplace=True)
但是我只想删除“性别”列,因为这是唯一一个旧字段和目标字段都完全空白的列。
谁能帮帮我。
谢谢。
尝试(我假设空单元格是 NaN):
m=df.isna().all().unstack(level=1)
cols=m[m.all(1)].index.tolist()
最后使用get_level_values()
:
df=df.loc[:, ~df.columns.get_level_values(0).isin(cols)]
df
的输出:
Name Email Phone no
Legecy Target Legecy Target Legecy Target
0 Name1 Name1 n1@abc.com NaN NaN NaN
1 Name1 Name2 NaN NaN NaN 12
尝试(我假设空单元格是字符串 ""
):
m = (~df.eq("").all().groupby(level=0).all()).eq(True)
x = df.loc[:, m.index[m]]
print(x)
打印:
Name Phone no email
legacy target legacy target legacy target
0 Name1 Name1 n1@abc
1 Name2 Name2 12