我正在尝试阅读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 == '.'])
答案 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
如果任何人都可以轻松过关,那就好了。