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),这应该能起到作用。它满足了我的目的!谢谢!不客气。如果它对你有效,你会喜欢投票的!