pandas read_csv将对象转换为float

时间:2016-07-24 15:57:20

标签: pandas

我正在尝试阅读csv文件。在一列(hpi),应该是float32,有两个记录填充a。表示缺失值。熊猫诠释了。作为一个角色。

如何在此列上强制数字?

data = pd.read_csv('http://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_AT_state.csv',
                    header=0,
                    names = ["state", "year", "qtr", "hpi"])

                    #,converters={'hpi': float})

#print data.head()
#print(data.dtypes)

print(data[data.hpi == '.'])

3 个答案:

答案 0 :(得分:2)

read.csv中使用na.values参数:

df = pd.read_csv('http://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_AT_state.csv',
                  header=0,
                  names = ["state", "year", "qtr", "hpi"], 
                  na_values='.')

df.dtypes
Out: 
state     object
year       int64
qtr        int64
hpi      float64
dtype: object

答案 1 :(得分:0)

您可以在阅读后将其投射出来。例如

data.loc[data.hpi == '.', 'hpi'] = pd.np.nan
data.hpi = data.hpi.astype(pd.np.float64)

或者,您可以使用na_values

read_csv参数

答案 2 :(得分:0)

to_numeric应用于所需的列(使用apply):

data.loc[data.hpi == '.', 'hpi'] = -1.0
data[['hpi']] = data[['hpi']].apply(pd.to_numeric)

例如:

In[69]: data = pd.read_csv('http://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_AT_state.csv',
                    header=0,
                    names = ["state", "year", "qtr", "hpi"])

In[70]: data[['hpi']].dtypes
  Out[70]: 
  hpi    object
  dtype: object

In[74]: data.loc[data.hpi == '.'] = -1.0
In[75]: data[['hpi']] = data[['hpi']].apply(pd.to_numeric)

In[77]: data[['hpi']].dtypes
Out[77]: 
hpi    float64
dtype: object

修改

由于某种原因,它会将所有列更改为float64。这是一种小型解决方法,可将其更改回int

在:

In[89]: data.dtypes
Out[89]: 
state     object
year     float64
qtr      float64
hpi      float64

后:

In[90]: data[['year','qtr']] = data[['year','qtr']].astype(int)
In[91]: data.dtypes
Out[91]: 
state     object
year       int64
qtr        int64
hpi      float64
dtype: object

如果任何人都可以轻松过关,那就好了。