【问题标题】:How to replace NULL Values in columns with Special characters in pandas如何用熊猫中的特殊字符替换列中的NULL值
【发布时间】:2020-11-24 18:54:02
【问题描述】:

我有一个列名如下的数据框:

Column (Name)     Column Name 2   Column3   Column (4)
NULL                 NULL             C3       100
22                    C44            C55       NULL
2                      C5            C11       13

我希望用平均值和最小值替换 Column (Name)Column (4) 子集中的空值。这个怎么做 ? Column (Name)Column (4) 中的值是数字

 df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
 df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())

我得到以下错误:

TypeError: can only concatenate str (not "int") to str

预期输出:

 Column (Name)     Column Name 2   Column3   Column (4)
    12                 NULL            C3        100
    22                  C44           C55        13
    2                    C5              C11       13

【问题讨论】:

    标签: python pandas replace


    【解决方案1】:

    您的错误意味着列中有一些非数值。

    测试列是否为数字,如果不是则将它们转换为 df.dtypes:

    print(df.dtypes)
    

    然后你可以测试一下哪些值是错误的:

    print (df.loc[pd.to_numeric(df['Column (Name)'], errors='coerce').isna(), 'Column (Name)'])
    

    最后转换为数字:

    df['Column (Name)'] = pd.to_numeric(df['Column (Name)'], errors='coerce')
    df['Column (4)'] = pd.to_numeric(df['Column (4)'], errors='coerce')
    

    或者如果想转换多列:

    cols = ['Column (Name)','Column (4)']
    df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
    

    然后使用您的解决方案:

    df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
    df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())
    

    或者你可以使用DataFrame.agg:

    df = df.fillna(df.agg({'Column (Name)':'mean', 'Column (4)':'min'}))
    print (df)
       Column (Name) Column Name 2 Column3  Column (4)
    0           12.0           NaN      C3       100.0
    1           22.0           C44     C55        13.0
    2            2.0            C5     C11        13.0
    

    【讨论】:

      【解决方案2】:

      实际上使用您的代码我没有错误。请与我的代码比较dtypes

      import io
      import pandas as pd
      

      读取您的数据。

      df = pd.read_csv(io.StringIO("""
      Column (Name)     Column Name 2   Column3   Column (4)
      NULL                 NULL             C3       100
      22                    C44            C55       NULL
      2                      C5            C11       13
      """), sep="\s\s+", engine="python")
      

      检查数据类型。

      df.dtypes
      
      Column (Name)    float64
      Column Name 2     object
      Column3           object
      Column (4)       float64
      dtype: object
      

      填写均值和最小值的代码

      df['Column (Name)']=df['Column (Name)'].fillna(df['Column (Name)'].mean())
      df['Column (4)']=df['Column (4)'].fillna(df['Column (4)'].min())
      

      填写的值为 12.0 和 13.0。

      【讨论】:

      • 数据类型是对象
      【解决方案3】:

      当您尝试连接字符串和整数时会引发此错误。如果存在相同的类型,则只能连接。尝试使用 str() 方法将整数转换为字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 2020-03-07
        • 2018-08-07
        • 2022-07-22
        • 1970-01-01
        • 2020-07-15
        • 2017-02-25
        相关资源
        最近更新 更多