Python 3.x 千位分隔符和日期格式之间存在冲突-pandas.read\u csv
我用Pythons的read_csv方法从csv文件中读取数据时遇到问题 行格式:Python 3.x 千位分隔符和日期格式之间存在冲突-pandas.read\u csv,python-3.x,pandas,csv,dataframe,Python 3.x,Pandas,Csv,Dataframe,我用Pythons的read_csv方法从csv文件中读取数据时遇到问题 行格式: '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给了我一个错误:基数为10的int()的文本无效:“544,00”, 当我打印这个dataframe对象时,我可以看到一些浮点
'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给了我一个错误:基数为10的int()的文本无效:“544,00”,
当我打印这个dataframe对象时,我可以看到一些浮点值已经被识别,而一些没有
value value1 value2
Datum
06.02.2013 544,00 2.52 3.53
接下来我做的是实现一个方法(即使我的文件中没有数千个):
然后我没有得到那个错误,但结果日期是06022013,而不是06.02.2013
为了解决这个问题,我尝试了以下方法:
df = pd.read_csv(filepath, sep=";", header=5, dayfirst=True, decimal=",", thousands = ".", parse_dates=[0])
在这种情况下,日期的格式如下:2013年1月2日午夜
在所有这些之后,我尝试向这个方法添加一个日期解析器,如下所示:
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') )
但它仍然像以前一样格式化了日期:2013年1月2日午夜。
有没有其他人遇到过这样的问题或知道如何解决
编辑:
因此,实际数据如下所示(标题后的第一行):
此外,第一行上已经发生错误。从那以后,我开始意识到,在更改第一行之后,我没有得到任何错误。修改的第一行:
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
熊猫版本:1.0.2
编辑2:
df = pd.read_csv(filepath, sep=";", header=5, decimal=",")
print(df.iloc[:,7:])
输出:
编辑3:
我发现了如何重现这个问题。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"
提前谢谢 您是否正确地指示了标题行 以下是CSV示例:
cat seven_rows.csv
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
您的原始导入:
df = pd.read_csv('seven_rows.csv', sep=";", header=5, decimal=",")
Datum value1 value2 value3 value4 value5 value6 value7 value8 value9 value10 value11 value12 value13 value14
0 01.03.2020 str1 str2 str3 str4 str5 str6 9.82 9.75 0.75 500.0 544.0 44.0 50.0 49.25
将value11
转换为int
:
df['value11'] = df['value11'].astype(int)
Datum value1 value2 value3 value4 value5 value6 value7 value8 value9 value10 value11 value12 value13 value14
0 01.03.2020 str1 str2 str3 str4 str5 str6 9.82 9.75 0.75 500.0 544 44.0 50.0 49.25
我设法解决了这个问题
df = pd.read_csv(filepath, sep=";", header=5, decimal=",", thousands = ".", parse_dates=['Datum'], date_parser = lambda x: datetime.strptime(x, '%d.%m.%Y'))
df['Datum'] = df['Datum'].dt.strftime("%d.%m.%Y")
问题是因为那个分隔符是“.”,后来我设法按照我想要的格式设置了日期,现在一切都很好
感谢所有的帮助 你用的是什么版本的熊猫?我无法重现您的错误。为什么要设置
头=5
?你的标题不是在第一行吗?我用附加信息编辑了这篇文章,所以我删除了以前的评论。是的,标题实际上是5,从0开始。对不起,没提那件事!如果我用类似逗号的非ASCII字符替换逗号,我可以重现您的错误,如。请验证您的文件仅包含您想要的字符。我已再次编辑了我的第一篇文章,在那里您可以在阅读csv文件后看到输出。有些浮点数可以识别,有些浮点数不能识别。我用“;”作为分隔符。伙计们,我想出了如何重现这个问题。示例在我的文章的EDIT3中。谢谢你迄今为止的帮助!
df['value11'] = df['value11'].astype(int)
Datum value1 value2 value3 value4 value5 value6 value7 value8 value9 value10 value11 value12 value13 value14
0 01.03.2020 str1 str2 str3 str4 str5 str6 9.82 9.75 0.75 500.0 544 44.0 50.0 49.25
df = pd.read_csv(filepath, sep=";", header=5, decimal=",", thousands = ".", parse_dates=['Datum'], date_parser = lambda x: datetime.strptime(x, '%d.%m.%Y'))
df['Datum'] = df['Datum'].dt.strftime("%d.%m.%Y")