【问题标题】:Filtering for different conditions in different columns pandas过滤不同列熊猫中的不同条件
【发布时间】:2021-11-24 04:40:38
【问题描述】:

Python 3.9 和 Pandas 1.3.4

这是df:

1   First Name  Last Name  fullname
2   Freddie     Mercury    Freddie Mercury
3   John        Lennon     John Lennon
4   David       Bowie      David Bowie
5                          John Doe
6   Joseph                 Joseph
7               Jovi       Jovi

我的一段代码目前只是发现fullname 列就是First Name + Last Name

我目前正在尝试过滤First Name 列、Last Name 列中的空白条目以及fullname 列中的任何“John Does”。

当前代码:

import pandas as pd

df = pd.read_csv('file.csv', dtype=str, header=0)

df2 = pd.DataFrame(df, columns=['First Name', 'Last Name', 'fullname'])

df['fullname'] = (df[['First Name', 'Last Name']].fillna('').agg(' '.join, axis=1).str.strip().replace('', 'John Doe'))

df_sort = df2.loc[df2['First Name'] == " "] | df2.loc[df2['Last Name'] == " "] | df2.loc[df2['fullname'] == "John Doe"]


df.to_csv('file.csv', index=False)
df_sort.to_csv('missing names.csv', index=False)

目前我正在将缺少的名称写入新文件并仅输出以下内容:

First Name   Last Name   fullname

下面都是空的。

我希望输出为:

First Name   Last Name   fullname
                         John Doe
Joseph
             Jovi

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    将可能的缺失值替换为空字符串,比较并测试DataFrame.any中是否至少有一个值匹配:

    df_sort = df2[df2[['First Name', 'Last Name']].fillna('').eq('').any(axis=1)]
    

    或者如果有缺失值使用:

    df_sort = df2[df2[['First Name', 'Last Name']].isna().any(axis=1)]
    

    【讨论】:

      【解决方案2】:

      您不需要在每个条件下都使用.loc,但您需要添加一些( )

      >>> df2[(df2['First Name'] == " ")
              | (df2['Last Name'] == " ")
              | (df2['fullname'] == "John Doe")]
      
        First Name Last Name  fullname
      3        NaN       NaN  John Doe
      4     Joseph       NaN    Joseph
      5        NaN      Jovi      Jovi
      

      注意:使您的缺失值适应您的代码。这里我像你一样使用== " "(空格),但你可以使用== ""(空字符串)或使用.isna()(缺失值)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 2021-12-18
        • 2018-08-09
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多