如何使用Python正确解析为excel文件中由逗号和点混合分隔的文本数字?

如何使用Python正确解析为excel文件中由逗号和点混合分隔的文本数字?,python,excel,pandas,Python,Excel,Pandas,我正在导入来自另一个办公室的excel文件的数据。 在其中一列中,对于每个单元格,我都有用作标记的数字列表。这些都是由不同的人手动插入的,并且(我猜)使用具有不同设置的计算机,因此结果非常不一致 例如,我有: tags= ['205', '306.3', '3,206,302','7.205.206'] 如果这是一个CSV文件(我尝试将一个文件转换为check),使用 请给我上面提到的清单 不幸的是,如前所述,我们讨论的是excel文件(复数),我必须处理它,并使用 pd.read_excel

我正在导入来自另一个办公室的excel文件的数据。 在其中一列中,对于每个单元格,我都有用作标记的数字列表。这些都是由不同的人手动插入的,并且(我猜)使用具有不同设置的计算机,因此结果非常不一致

例如,我有:

tags= ['205', '306.3', '3,206,302','7.205.206']
如果这是一个CSV文件(我尝试将一个文件转换为check),使用

请给我上面提到的清单

不幸的是,如前所述,我们讨论的是excel文件(复数),我必须处理它,并使用

pd.read_excel(my_file,sheetname=my_sheet,encoding='utf-16',converters{'my_column':str})
我得到的是:

tags= ['205', '306.3', '3,206,302','7205206']
如您所见,只要数字可以逻辑上以千表示(因此,不是我列表中的第二个数字),点就会被识别为千分隔符,我得到一个数字,而不是三个

我试着阅读文档,在stackoverflow和google上搜索,但是描述这个问题的关键词太模糊了,我还没有找到可行的解决方案

如何使用excel文件获取正确的列表


谢谢。

发生此问题的原因可能是

一种可能的修复方法是添加一个千分位分隔符。例如,如果实际使用“,”作为千位分隔符,则可以在excel阅读器中添加“<代码>千位=”,”:

pd.read_excel(my_file,sheetname=my_sheet,encoding='utf-16',thousands=',',converters{'my_column':str})
如果
milks=None
()尚未解决您的问题,您还可以选择数据中不存在的任意千位分隔符,使输出保持不变。您还应该确保您正在将字段转换为str(在这种情况下,使用数千是一种冗余,因为这两种方式都不适用于字符串)

编辑:

我尝试使用以下虚拟数据('test.xlsx'):

dataf = pandas.read_excel('test.xlsx', header=0, converters={'a':str, 'b':str,'c':str,'d':str})
print(dataf.to_string)
我得到了以下输出:

Columns: [205, 306.3, 3,206,302, 7.205.206]
这正是你想要的。你确定你有最新版本的pandas,并且你实际上没有在你的converters关键字中使用
converters={'col':int}
float


就目前情况而言,听起来您要么将字段转换为数字(int或float),要么代码中的其他地方出现了问题。pandas
read\u excel
似乎可以按所述工作,我可以使用上面指定的代码获得您指定的结果。在其他WOD中:您的代码应该可以工作,若不能工作,可能是因为版本过时、代码中的其他部分甚至源数据出现问题。目前,无法用您提供的信息进一步回答您的问题。

数字在Excel中的存储方式是不同的,还是只是格式不同?我认为它们的存储方式不同,因为将同一文件转换为CSV我得到的仍然是一列混合单元格(一些带有逗号,一些带有点)。当打开Excel文件时,它们在视觉上也会有所不同(一些被识别为数字并向右对齐,一些被识别为文本并向左对齐)。不幸的是,这并不能解决问题(我已经尝试过了),因为使用千位分隔符将标签转换为一个数字,这不是我想要的(请记住:这些是由逗号和点分隔的不同标记)。例如,使用
数千=”;“
会将您的问题作为一个肮脏的解决方法来解决吗?这似乎是熊猫中的一个疏忽和边缘情况。我不明白为什么
数千=”;“
应该不同于
数千=”,“
(无论如何,我试过了,但没有)。我用虚拟数据编辑了我的答案,并进行了测试运行。你能确认你是否能得到相同的结果吗?我运行了你的代码,但仍然得到错误。我安装了Pandas 0.18.1,为了回答你的另一个问题,converters参数与我在那里写的完全相同,但具有列的实际名称(即“R16”)。
dataf = pandas.read_excel('test.xlsx', header=0, converters={'a':str, 'b':str,'c':str,'d':str})
print(dataf.to_string)
Columns: [205, 306.3, 3,206,302, 7.205.206]