过滤 Dataframe - 列和行
Filtering for Dataframe - columns and rows
我想对 Pandas 数据帧执行过滤。
示例 table 如下所示。例如,我想过滤(删除)所有包含值 2 的列。
C1 C2 C3 C4 C5
1 1 1 1 4
1 2 1 2 5
1 1 3 1 4
我想要这样的结果 table。 (删除了 C2 和 C4)
C1 C3 C5
1 1 4
1 1 5
1 3 4
此外,我想使用值 5 在行上执行此作业。
C1 C3 C5
1 1 4
1 3 4
对于单个列或行,我可以很容易地做到这一点,例如 df = df[df.C2 !=2],但我对多个列没有什么好主意或整个列和行。
有什么简单的方法吗?
您可以 select 通过 loc
with any
并指定 axis
:
print df
C1 C2 C3 C4 C5
0 1 1 1 1 4
1 1 2 1 2 5
2 1 1 3 1 4
print ~(df == 2)
C1 C2 C3 C4 C5
0 True True True True True
1 True False True False True
2 True True True True True
df = df.loc[:, ~(df == 2).any(axis=0)]
print df
C1 C3 C5
0 1 1 4
1 1 1 5
2 1 3 4
df = df.loc[~(df == 5).any(axis=1)]
print df
C1 C3 C5
0 1 1 4
2 1 3 4
我想对 Pandas 数据帧执行过滤。 示例 table 如下所示。例如,我想过滤(删除)所有包含值 2 的列。
C1 C2 C3 C4 C5
1 1 1 1 4
1 2 1 2 5
1 1 3 1 4
我想要这样的结果 table。 (删除了 C2 和 C4)
C1 C3 C5
1 1 4
1 1 5
1 3 4
此外,我想使用值 5 在行上执行此作业。
C1 C3 C5
1 1 4
1 3 4
对于单个列或行,我可以很容易地做到这一点,例如 df = df[df.C2 !=2],但我对多个列没有什么好主意或整个列和行。 有什么简单的方法吗?
您可以 select 通过 loc
with any
并指定 axis
:
print df
C1 C2 C3 C4 C5
0 1 1 1 1 4
1 1 2 1 2 5
2 1 1 3 1 4
print ~(df == 2)
C1 C2 C3 C4 C5
0 True True True True True
1 True False True False True
2 True True True True True
df = df.loc[:, ~(df == 2).any(axis=0)]
print df
C1 C3 C5
0 1 1 4
1 1 1 5
2 1 3 4
df = df.loc[~(df == 5).any(axis=1)]
print df
C1 C3 C5
0 1 1 4
2 1 3 4