Python 3.x 千位分隔符和日期格式之间存在冲突-pandas.read\u 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对象时,我可以看到一些浮点

我用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对象时,我可以看到一些浮点值已经被识别,而一些没有

                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")