Pandas DataFrames列未标识为数字

时间:2018-05-29 16:05:03

标签: python pandas numpy dataframe imputation

我正在使用Pandas数据框,使用http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data处的UCI存储库信用筛选文件

数据包含一些缺失值,我想根据列的数据类型执行不同的插补策略。例如,如果列是数字,则使用中位数输入,但如果它是分类替换类别,例如"无值"。

我运行此代码来识别数字列:

#Import data
import pandas as pd
data = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning- 
databases/credit-screening/crx.data', header=None)

#Imputation
import numpy as np
data = data.replace('?', np.nan)
numeric_columns = data.select_dtypes(include=[np.number]).columns

它返回:

Out[67]: Int64Index([2, 7, 10, 14], dtype='int64')

由于某种原因,它没有识别第1列(显然是数字的)。我相信原因是列中有一些NaN值使它看起来不是数字。任何人都知道发生了什么,我该怎么做才能将第1列标识为数字?

谢谢!

2 个答案:

答案 0 :(得分:1)

问题是,data[1]object替换?后仍然是d NaN。但是,您可以通过以下两种方式将其转换为浮动:

第一个是pd.to_numericerrors='coerce'一起使用,它将不可解析的字符串转换为NaN

data[1] = pd.to_numeric(data[1], errors='coerce')

第二种方法是使用您的replace策略,然后使用astype(float)

data = data.replace('?', np.nan)
data[1] = data[1].astype(float)

这两种方法都会将列1作为数字列包含在内:

numeric_columns = data.select_dtypes(include=[np.number]).columns
>>> numeric_columns
Int64Index([1, 2, 7, 10, 14], dtype='int64')

答案 1 :(得分:1)

pd.to_numericerror='ignore'

一起使用

之前,df.info():

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 690 entries, 0 to 689
Data columns (total 16 columns):
0     678 non-null object
1     678 non-null object
2     690 non-null float64
3     684 non-null object
4     684 non-null object
5     681 non-null object
6     681 non-null object
7     690 non-null float64
8     690 non-null object
9     690 non-null object
10    690 non-null int64
11    690 non-null object
12    690 non-null object
13    677 non-null object
14    690 non-null int64
15    690 non-null object
dtypes: float64(2), int64(2), object(12)
memory usage: 86.3+ KB

使用pd.to_numeric:

df = df.replace('?',np.nan)
df = df.apply(lambda x: pd.to_numeric(x,errors='ignore'))

输出后,df.info():

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 690 entries, 0 to 689
Data columns (total 16 columns):
0     678 non-null object
1     678 non-null float64
2     690 non-null float64
3     684 non-null object
4     684 non-null object
5     681 non-null object
6     681 non-null object
7     690 non-null float64
8     690 non-null object
9     690 non-null object
10    690 non-null int64
11    690 non-null object
12    690 non-null object
13    677 non-null float64
14    690 non-null int64
15    690 non-null object
dtypes: float64(4), int64(2), object(10)
memory usage: 86.3+ KB