Python 熊猫中缺少值,使用错误=';胁迫';

Python 熊猫中缺少值,使用错误=';胁迫';,python,pandas,Python,Pandas,我想使用下面的命令计算以下数据缺少的值 df.isnull().sum() 它未能检测到丢失的值。然后我使用了以下命令 cols = df.columns df[cols] = df[cols].apply(pd.to_numeric, errors='coerce') missing = df.isnull().sum() print(missing) 它起作用了,但它也将“BinaryObject”分类响应变量转换为NAN。如果我在多个列中有分类变量,并且缺少的值被标记为?或其他奇怪的符

我想使用下面的命令计算以下数据缺少的值

df.isnull().sum()
它未能检测到丢失的值。然后我使用了以下命令

cols = df.columns
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
missing = df.isnull().sum()
print(missing)
它起作用了,但它也将“BinaryObject”分类响应变量转换为
NAN
。如果我在多个列中有分类变量,并且缺少的值被标记为
或其他奇怪的符号,我如何识别这些缺少的值?我感谢您的建议!

您可以使用np.isreal()查看列是否包含数字的字符串表示形式

cols = [c for c in df.columns if df[c].map(np.isreal).all()]
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
missing = df.isnull().sum()
print(missing)
这里有一个玩具的例子

import pandas as pd
import numpy as np

dict = {'Name': ['Alex', 'Alex', '', 'Donna'],
        'Number_1': ['1', np.nan, '3', '4'],
        'Number_2': [np.nan,np.nan, '3', '4']}

df = df.replace('?', np.nan)

df = pd.DataFrame(dict)


print(df)

Name    Number_1    Number_2
0   Alex    1        NaN
1   Alex    NaN      NaN
2           3        3
3   Donna   4        4

cols = [c for c in df.columns.tolist() if df[c].map(np.isreal).all()]
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
missing = df.isnull().sum()
print(missing)

Name        0
Number_1    1
Number_2    2
dtype: int64

print(df.dtypes)

Name         object
Number_1    float64
Number_2    float64
dtype: object

print(df)
    Name    Number_1    Number_2
0   Alex    1.0         NaN
1   Alex    NaN         NaN
2           3           3
3   Donna   4           4
回到您的原始代码,我们可以看到差异

cols = df.columns
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
missing = df.isnull().sum()
print(missing)

Name        4
Number_1    1
Number_2    2
dtype: int64

print(df.dtypes)

Name        float64
Number_1    float64
Number_2    float64
dtype: object

print(df)
    Name    Number_1    Number_2
0   NaN     1.0         NaN
1   NaN     NaN         NaN
2   NaN     3.0         3.0
3   NaN     4.0         4.0

但它仍然无法将
定义为NaN!我添加了,df=df.replace('?',np.NaN),这应该能起到作用。它满足了我的目的!谢谢!不客气。如果它对你有效,你会喜欢投票的!