如何正确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版本,代码中的其他部分,甚至源数据的问题。 就目前而言,用您提供的信息来回答您的问题是不可能的。