Десятичная точка действует неправильно - ValueError: не удалось преобразовать строку в число с плавающей запятой: '.'

У меня есть данные SP500, загруженные из ФРС, очень простой файл .csv с двумя полями; дата и цена. Когда я делаю pd.read_csv() для загрузки в фрейм данных, я получаю две ошибки:

TypeError: невозможно преобразовать массив из dtype ('O') в dtype ('float64') в соответствии с правилом 'safe'

ValueError: не удалось преобразовать строку в число с плавающей запятой: '.'

Кажется, мне говорят, что десятичная точка '.' в поле цены выкидывает ошибку.

У меня есть много файлов, которые обрабатывают десятичную точку при преобразовании строкового объекта в число с плавающей запятой.

вот используемые данные:

observation_date,price
2008-04-04,1340.40
2008-04-07,1372.54
2008-04-08,1365.54
2008-04-09,1354.49
2008-04-10,1360.55
2008-04-11,1332.83
2008-04-14,1328.32
2008-04-15,1334.43
2008-04-16,1364.71

Я также использовал:

SP500 = pd.read_csv(csv_file)

для загрузки файла укажите оба поля как объект dtype, а затем используйте

SP500.price = SP500.price.astype(float).fillna(0.0)

это вызывает те же две ошибки


person Christopher Pfeifer    schedule 07.04.2018    source источник
comment
Я не могу воспроизвести, это нормально для меня.   -  person user3483203    schedule 07.04.2018
comment
Когда я ввожу данные в файл .csv с помощью блокнота, он работает нормально. но загруженный файл csv из Федеральной резервной системы выдает ошибку. Я предоставил пример данных после первой загрузки исходного файла Fed. данные, позволяющие pandas использовать объект dtype для обоих полей, затем выполнить db.to_csv (file_csv, decimal = '.', index = False, sep = ','), чтобы записать фрейм данных в новый файл csv, указав формат данных показано в сообщении. Однако этот новый файл CSV по-прежнему вызывает две ошибки. Могут ли быть какие-то скрытые символы из исходных данных, записываемых командой pd.to_csv ().   -  person Christopher Pfeifer    schedule 07.04.2018
comment
вот ссылка для загрузки csv-файла SP500. fred.stlouisfed.org/series/SP500 используйте нажмите кнопку загрузки, затем выберите файл csv. Я пробовал 4 других файла feb, все они выдают одну и ту же ошибку при попытке загрузить данные о ценах в виде полей с плавающей запятой. десятичная точка в полях вызывает ошибку.   -  person Christopher Pfeifer    schedule 07.04.2018


Ответы (1)


Попробуйте указать, что '.' является значением NaN

SP500 = pd.read_csv('SP500.csv', na_values=['.'])
person piRSquared    schedule 07.04.2018
comment
Это РАБОТАЕТ! ‹Класс 'pandas.core.frame.DataFrame'› RangeIndex: 2609 записей, от 0 до 2608 Столбцы данных (всего 2 столбца): Наблюдение_дата 2609 ненулевой объект, цена 2518 ненулевой float64 dtypes: float64 (1), объект (1) использование памяти: 40,8+ КБ - person Christopher Pfeifer; 07.04.2018