kbr*_*r85 6 nan python-3.x pandas
我有一个带有多索引列的数据框。
我需要从此数据框中删除列子集中具有 NaN 值的行。
我正在尝试使用subset选项pd.dropna,但我无法找到指定列子集的方法。我尝试过使用pd.IndexSlice但这不起作用。
在下面的示例中,我需要乘坐最后一排。
import pandas as pd
# ---
a = [1, 1, 2, 2, 3, 3]
b = ["a", "b", "a", "b", "a", "b"]
col = pd.MultiIndex.from_arrays([a[:], b[:]])
val = [
[1, 2, 3, 4, 5, 6],
[None, None, 1, 2, 3, 4],
[None, 1, 2, 3, 4, 5],
[None, None, 5, 3, 3, 2],
[None, None, None, None, 5, 7],
]
# ---
df = pd.DataFrame(val, columns=col)
# ---
print(df)
# ---
idx = pd.IndexSlice
df.dropna(axis=0, how="all", subset=idx[1:2, :])
# ---
print(df)
Run Code Online (Sandbox Code Playgroud)
使用该thresh选项是一种替代方法,但如果可能的话我想使用subset和how='all'
处理 MultiIndex 时,MultiIndex 的每一列都可以指定为一个元组:
In [67]: df.dropna(axis=0, how="all", subset=[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')])
Out[67]:
1 2 3
a b a b a b
0 1.0 2.0 3.0 4.0 5 6
1 NaN NaN 1.0 2.0 3 4
2 NaN 1.0 2.0 3.0 4 5
3 NaN NaN 5.0 3.0 3 2
Run Code Online (Sandbox Code Playgroud)
或者,要选择第一级等于1或的所有列2,您可以使用:
In [69]: df.dropna(axis=0, how="all", subset=df.loc[[], [1,2]].columns)
Out[69]:
1 2 3
a b a b a b
0 1.0 2.0 3.0 4.0 5 6
1 NaN NaN 1.0 2.0 3 4
2 NaN 1.0 2.0 3.0 4 5
3 NaN NaN 5.0 3.0 3 2
Run Code Online (Sandbox Code Playgroud)
df[[1,2]].columns也有效,但这会返回一个(可能很大)中间 DataFrame。df.loc[[], [1,2]].columns由于其中间 DataFrame 为空,因此内存效率更高。
| 归档时间: |
|
| 查看次数: |
6053 次 |
| 最近记录: |