Панды read_csv low_memory и опции dtype.TypeError: Невозможно привести массив из dtype ('O') к dtype ('float64') в соответствии с правилом safe. - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь прочитать CSV-файл

df = pd.read_csv('Salaries.csv')

У меня есть это:

sys: 1: DtypeWarning: Columns (3,4,5,6,12) имеют смешанные типы.Укажите опцию dtype при импорте или установите low_memory = False.

Итак, я попытался:

df = pd.read_csv('Salaries.csv', sep=',', dtype={
'Id': int, 
'EmployeeName': str, 
'JobTitle': str, 
'BasePay': float,
'OvertimePay': float, 
'OtherPay': float, 
'Benefits': float, 
'TotalPay': np.float64,
'TotalPayBenefits': np.float64,
'Year': np.int64,
'Notes': np.float64,
'Agency': str,
'Status': float})

И теперь у меня есть это:

Traceback(последний вызов был последним): Файл "pandas_libs \ parsers.pyx", строка 1156, в pandas._libs.parsers.TextReader._convert_tokens TypeError: Невозможно привести массив из dtype ('O') к dtype ('float64') в соответствии справило 'safe'

Также я прочитал ранее заданные вопросы и официальные документы, но не понимаю, в чем проблема.

Вот пример данных из Salaries.csv

Id, EmployeeName, JobTitle, BasePay, OvertimePay, OtherPay, Льготы, TotalPay, TotalPayBenefits, Год, Примечания, Агентство, Статус

1, НАТАНИЛЬ ФОРД, ГЕНЕРАЛЬНЫЙ МЕНЕДЖЕР-МЕТРОПОЛИТ ТРАНЗИТ АВТОР, 167411,18,0,0,400184,25, 567595,43,567595,43,2011, Сан-Франциско,

1 Ответ

0 голосов
/ 20 ноября 2018

В вашем кадре данных могут быть значения nan.Поэтому, когда вы указываете dtype, убедитесь, что вы заполнили все столбцы некоторым значением, чтобы избежать смешанного dtype для этого столбца.

Например, например:

column_name
     np.nan
          1
          2
          3

Заполните это значение nan с помощью df.column_name.fillna(0, inplace=True)прежде чем написать этот дф в CSV.Поэтому всякий раз, когда вы читаете этот файл снова с pd.read_csv, проблем не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...