由于由于绘制数据时出错(使用plt图),我试图将通过CSV文件导入的数据转换为float或int类型。我已经尝试了几乎所有在网上看到的内容,pd.to_numeric,.astype(),创建了要转换的函数,并且每次收到错误代码无法将字符串转换为float的错误。到目前为止,我所有的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
答案 0 :(得分:1)
问题是tolower
。这样,您将获得具有混合类型值的列。在熊猫中,混合类型值始终为fillna(' ')
类型。您可以删除object
,并获得fillna
dtypes:
float64
答案 1 :(得分:1)
您可能想使用'dtype'参数设置正确的类型,您可以在https://honingds.com/blog/pandas-read_csv/上找到示例
答案 2 :(得分:1)
我认为您有对象是因为您强制进行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)