pandas Чтение CSV-файла не преобразует типы данных из объекта в int - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь преобразовать мои данные, импортированные через файл CSV, в типы с плавающей запятой или int из-за ошибок в графическом представлении данных (с использованием графика plt). Я пробовал почти все, что видел в Интернете, pd.to_numeri c, .astype (), создавая функции для преобразования, и каждый раз, когда я получаю сообщение об ошибке, что код не может преобразовать строку как float. Пока все мои типы объектов являются объектами, даже числовые c. Ниже мой код:

    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 ]

1 голос
/ 27 мая 2020

Вероятно, вы захотите использовать параметр dtype, чтобы установить правильный тип, вы можете найти пример на https://honingds.com/blog/pandas-read_csv/

1 голос
/ 27 мая 2020

Я думаю, у вас есть объекты, потому что вы принудительно преобразовали to_numeri c, поэтому строки были преобразованы в NaN, а затем вы заполнили NaN " ". Если вы уверены, что все ваши столбцы должны быть преобразованы в типы numeri c, я предлагаю выполнить некоторую предварительную обработку:

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)   
1 голос
/ 27 мая 2020

Проблема: fillna(' '). Таким образом вы получаете столбцы со значениями смешанного типа. И значения смешанного типа всегда имеют тип object в Pandas. Вы можете удалить fillna, и вы получите float64 dtypes:

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