读取熊猫CSV文件不会将数据类型从对象转换为整数

时间:2020-05-27 14:01:31

标签: python pandas csv matplotlib dtype

由于由于绘制数据时出错(使用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

3 个答案:

答案 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)   
相关问题