pandas CSV 文件读取不会将数据类型从 object 转换为 int
Posted
技术标签:
【中文标题】pandas CSV 文件读取不会将数据类型从 object 转换为 int【英文标题】:pandas CSV file read won't convert data types from object to int 【发布时间】:2020-09-14 14:31:17 【问题描述】:由于绘制数据时出现错误(使用 plt plot),我正在尝试将通过 CSV 文件导入的数据转换为 float 或 int 类型。我已经尝试了我在网上看到的几乎所有东西,pd.to_numeric,.astype(),创建要转换的函数,每次我收到代码无法将字符串转换为浮点数的错误。到目前为止,我所有的 dtypes 都是对象,甚至是数字的。以下是我的代码:
apo2data = pd.read_csv('/Users/lily/Desktop/Apo2excel.csv')
type(apo2data)
apo2data.dtypes
data = apo2data.apply(pd.to_numeric, errors='coerce').fillna(" ")
data.info()
data.head()
Out[:] <class 'pandas.core.frame.DataFrame'>
RangeIndex: 6676 entries, 0 to 6675
Data columns (total 38 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 KIC 6676 non-null object
1 2MASS 6676 non-null object
2 Teff 6676 non-null object
3 e_Teff 6676 non-null object
4 FeH 6676 non-null object
5 e_FeH 6676 non-null object
...
dtypes: object(38)
memory usage: 1.9+ MB
【问题讨论】:
【参考方案1】:问题是fillna(' ')
。通过这样做,您将拥有具有混合类型值的列。在 Pandas 中,混合类型的值始终为 object
类型。你可以删除fillna
,你会得到float64
dtypes:
data = apo2data.apply(pd.to_numeric, errors='coerce')
【讨论】:
【参考方案2】:你可能想使用'dtype'参数来设置正确的类型,你可以在https://honingds.com/blog/pandas-read_csv/找到一个例子
【讨论】:
【参考方案3】:我认为你有对象,因为你强制转换 to_numeric,所以字符串被转换为NaN
,然后你用" "
填充NaN
。如果您确定所有列都应转换为数字类型,我建议您进行一些预处理:
df = pd.DataFrame('col1':list('12345'),
'col2':['green','blue','red','yellow','pink'],
'col3':['1 green','2 blue','3 red','4 yellow','5 pink'])
df['col3'] = df.col3.apply(lambda x: x.split()[0]).astype(int)
【讨论】:
以上是关于pandas CSV 文件读取不会将数据类型从 object 转换为 int的主要内容,如果未能解决你的问题,请参考以下文章