簡體   English   中英

如何用熊貓中的特殊字符替換列中的空值

[英]How to replace NULL Values in columns with Special characters in pandas

我有一個列名的數據框,如下所示:

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

您的錯誤意味着列中有一些非數字值。

測試列是否為數字,如果不是,則將它們轉換為 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

實際上使用您的代碼我沒有錯誤。 請與我的代碼比較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。

當您嘗試連接字符串和整數時會引發此錯誤。 如果存在相同類型,則只能連接。 嘗試使用 str() 方法將整數轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM