Pandas:在几个特定列中的任何一列中过滤具有Null / None / NaN值的行

时间:2016-10-04 11:03:43

标签: python pandas filtering

我有一个csv文件,里面有很多名为"NULL"的字符串,在几列中。

我想在几个特定列的任何中选择(过滤)"NULL"个值的行。

示例:

["Firstname"]   ["Lastname"]    ["Profession"]
"Jeff"          "Goldblum"      "NULL"
"NULL"          "Coltrane"      "Musician"
"Richard"       "NULL"          "Physicist"

在这里,我想过滤df"NULL" {{1}列中值"Firstname"的(选择)行} - 但如果"Lastname"中的值为"NULL",则不会。

这设法在一列中过滤字符串(不是"Profession"):

None


不过,我尝试通过以下方式将df = df[df["Firstname"].str.contains("NULL", case=False)] 字符串转换为"NULL"

None

鉴于上述df = df.where((pd.notnull(df)), None) df.columns = df.columns.str.lower() 过滤,在转换为str.contains之前,可能更容易在"NULL"字符串中进行过滤?

2 个答案:

答案 0 :(得分:3)

我认为首先需要replace NULL字符串NaN。然后按isnull检查所选列中的所有NaN值,并按any选择所有行boolean indexing True

df = df.replace("NULL", np.nan)

print (df[['Firstname','Lastname']].isnull())
  Firstname Lastname
0     False    False
1      True    False
2     False     True

print (df[df[['Firstname','Lastname']].isnull().any(1)])
  Firstname  Lastname Profession
1       NaN  Coltrane   Musician
2   Richard       NaN  Physicist

答案 1 :(得分:1)

你可以尝试:

df.replace(to_replace="NULL", value = None)

"NULL"的所有出现替换为None