如何正确parsing为文本数字在Excel中使用Python混合逗号和点分隔?

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

作为一个例子,我有:

tags= ['205', '306.3', '3,206,302','7.205.206'] 

如果这是一个CSV文件(我试图转换一个单一的文件来检查),使用

 pd.read_csv(my_file,sep=';') 

会给我完全上面提到的名单。

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

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

我得到的是:

 tags= ['205', '306.3', '3,206,302','7205206'] 

正如你所看到的,只要数字可以用数以千计的逻辑表示(所以,不是我列表中的第二个数字),点被识别为千位分隔符,而我得到一个单一的数字,而不是三个。

我尝试阅读文档,searchstackoverflow和谷歌,但关键字来描述这个问题太模糊,我还没有find一个可行的解决scheme。

我怎样才能得到正确的清单使用Excel文件?

谢谢。

这个问题很可能发生,因为pandas在他们的dateparsing器之前运行他们的数字parsing器 。

一个可能的解决方法是添加一个千位分隔符。 例如,如果您实际上使用“,”作为您的千位分隔符,则可以在您的Excel读取器中添加thousands=','

 pd.read_excel(my_file,sheetname=my_sheet,encoding='utf-16',thousands=',',converters{'my_column':str}) 

你也可以select一个不存在于你的数据中的任意的千位分隔符,如果thousands=None ( 这应该是根据文档的默认值 ),那么输出保持不变,但是还没有处理你的问题。 你也应该确保你将字段转换为str(在这种情况下,使用数千是多余的,因为它不适用于任何方式)。

编辑:

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

 abcd 205 306.3 3,206,302 7.205.206 

 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 = {'col':int}float在你的转换器关键字?

就目前而言,这听起来像是将字段转换为数字(int或float),或者在代码的其他地方存在问题。 pandasread_excel似乎按照描述的工作,我可以得到你用上面指定的代码指定的结果。 在其他方面:你的代码应该工作,如果不是这样,可能是由于过时的pandas版本,代码中的其他部分,甚至源数据的问题。 就目前而言,用您提供的信息来回答您的问题是不可能的。