根据字段是否包含值来过滤内容

时间:2014-03-04 19:19:23

标签: python csv pandas filtering

在处理csv文件的原始代码中,我从包含特定值的行中跳过数据:

df = df[df["ORGANIZATION"]!="Org1"]

现在我需要跳过包含该值的数据。以下确定它是否包含值...

df = df[df["ORGANIZATION"].str.contains("Org1")]

但我如何否定那些隐藏这些价值观呢?某些值可能是“Org1 - Dave”或“Org1 - Lisa”。如何跳过值中某处包含“Org1”的数据?

我一直在搜索,但不能正确地说出我的问题以找到正确的答案。

1 个答案:

答案 0 :(得分:3)

您可以使用~否定您的布尔系列:

>>> df = pd.DataFrame({"ORGANIZATION": ["Org1", "Org1 - Dave", "Org1 - Lisa", "Org2 - Bob", "Org3 - Sally"]})
>>> df
   ORGANIZATION
0          Org1
1   Org1 - Dave
2   Org1 - Lisa
3    Org2 - Bob
4  Org3 - Sally

[5 rows x 1 columns]
>>> df[df["ORGANIZATION"].str.contains("Org1")]
  ORGANIZATION
0         Org1
1  Org1 - Dave
2  Org1 - Lisa

[3 rows x 1 columns]
>>> df[~df["ORGANIZATION"].str.contains("Org1")]
   ORGANIZATION
3    Org2 - Bob
4  Org3 - Sally
[2 rows x 1 columns]

请注意,您还可以使用groupby来分割帧:

>>> gg = df.groupby(df["ORGANIZATION"].str.contains("Org1"))
>>> for k,g in gg:
...     print k
...     print g
...     
False
   ORGANIZATION
3    Org2 - Bob
4  Org3 - Sally

[2 rows x 1 columns]
True
  ORGANIZATION
0         Org1
1  Org1 - Dave
2  Org1 - Lisa

[3 rows x 1 columns]