CSV文件读取不会将数据类型从object转换为int

2024-06-25 23:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将通过CSV文件导入的数据转换为float或int类型,因为在绘制数据时出错(使用plt plot)。我几乎尝试了我在网上看到的所有东西,pd.to_numeric,.astype(),创建要转换的函数,每次我收到代码无法将字符串转换为float的错误。到目前为止,我所有的数据类型都是对象,甚至是数字类型。下面是我的代码:

    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

Tags: columnscsvto数据代码类型dataobject
3条回答

您可能想使用'dtype'参数来设置正确的类型,您可以在https://honingds.com/blog/pandas-read_csv/上找到一个示例

我认为您有对象是因为您强制进行了to_数字转换,所以字符串被转换为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)   

问题是fillna(' ')。这样,就有了具有混合类型值的列。而混合类型值在Pandas中始终是object类型。您可以删除fillna,您将获得float64数据类型:

data = apo2data.apply(pd.to_numeric, errors='coerce')

相关问题 更多 >