У меня проблема с чтением данных из файла csv с помощью метода read_csv Pythons.
Формат строки:
'06.02.2013;544,00;2,52;3,53'
С этой реализацией:
df = pd.read_csv(filepath, sep=";", header=5, decimal=",")
df['value'] = df['value'].astype(int)
Python дает мне ошибку: недопустимый литерал для int () с базой 10: '544,00' , Когда я печатаю этот объект фрейма данных, я вижу, что некоторые значения с плавающей запятой были распознаны, а некоторые - убежищем ' т.
value value1 value2
Datum
06.02.2013 544,00 2.52 3.53
Следующим шагом я реализовал метод (хотя в моем файле нет тысяч):
df = pd.read_csv(filepath, sep=";", header=5, decimal=",", thousands = ".")
Тогда я не получаю эту ошибку, но получаю дату 06022013 вместо 06.02.2013 .
Чтобы решить эту проблему, я попробовал следующее:
df = pd.read_csv(filepath, sep=";", header=5, dayfirst=True, decimal=",", thousands = ".", parse_dates=[0])
В этом случае дата форматируется следующим образом: 2 января 2013 года, полночь.
И после всего этого я попытался добавить date_parser к этому методу следующим образом:
df = pd.read_csv(filepath, sep=";", header=5, dayfirst=True, decimal=",", thousands = ".", parse_dates=[0],date_parser=lambda x: datetime.strptime(x, '%d.%m.%Y') )
Но по-прежнему форматируется дата, как и раньше: 2 января 2013 года, полночь . Кто-нибудь еще сталкивался с такой проблемой или знает, как ее решить?
EDIT: Итак, реальные данные выглядят так (первая строка после заголовка):
0
1
2
3
4
Datum value1 value2 value3 value4 value5 value6 value7 value8 value9 value10 value11 value12 value13 value14
01.03.2020 str1 str2 str3 str4 str5 str6 9,82 9,75 0,75 500,00 544,00 44,00 50,00 49,25
In [1]: df['value11'] = df['value11'].astype(int)
Out [1]: invalid literal for int() with base 10: '544,00'
Кроме того, ошибка разместить уже в первом ряду. С тех пор я понял, что после изменения первой строки я не получаю ошибки. Измененная первая строка:
0
1
2
3
4
Datum value1 value2 value3 value4 value5 value6 value7 value8 value9 value10 value11 value12 value13 value14
01.04.2020 str1 str2 str3 str4 str5 str6 36,03 5,46 84,85 23,00 64,00 41,00 59,92 -24,92
Pandas версия: 1.0.2
EDIT2:
df = pd.read_csv(filepath, sep=";", header=5, decimal=",")
print(df.iloc[:,7:])
ВЫХОД:
EDIT3: Я узнал, как воспроизвести эту проблему. Пример файла csv:
data.csv
0
1
2
3
4
Datum
Datum;value1;value2;value3;value4;value5;value6;value7;value8;value9;value10;value11;value12;value13;value14
01.03.2020;str1;str2;str3;str4;str5;str6;"9,82";"9,75";"0,75";"500,00";"544,00";"44,00";"50,00";"49,25"
01.03.2020;str1;str2;str3;str4;str5;str6;"9,72";"7,00";"27,97";"737,00";"1.123,00";"386,00";"51,03";"23,06"
Заранее спасибо!