【发布时间】:2019-06-04 15:34:51
【问题描述】:
我为 Python 编写了一个程序,它在 pandas 中读取一个 csv 文件,然后进行一些分析。不幸的是,一些正在使用我的程序的朋友使用欧洲计算机,因此他们的 csv 文件使用逗号 (,) 来分隔小数,而我使用点 (.) 。在任何情况下,列之间的一般分隔符都是分号,所以那里没有问题。
现在我在程序的开头有一个设置,如下所示:
european_decimal=True #False
后来
if european_decimal:
df1 = pd.read_csv(directory+filename,delimiter=";",decimal=",")
else:
df1 = pd.read_csv(directory+filename,delimiter=";")
这当然有效。但它真的很丑,需要我不是计算机程序员的朋友来乱码。有什么方法可以找出运行 python 程序的计算机是否使用逗号或句号作为分隔符?
后期编辑: 最后,我应用了@ALollz 解决方案,我只是将任何带逗号的字符串转换为带点的字符串:
for column in list_data_columns:
df1[column]=df1[column].astype(str).str.replace(",",".").astype(float)
【问题讨论】:
-
但这并不能阻止您的欧洲朋友打开小数点分隔符为
'.'的csv 文件?无论如何,您可以检测语言环境或 UI 语言环境:stackoverflow.com/questions/3425294/… 根据您的需要来执行此操作 -
嗨 Pietro,情况可能并非如此,但您不能只读取应该包含一些数字的数据帧的通用条目并检查是否使用逗号或点作为小数分隔符?
-
这似乎比
decimal = '.'; if european_decimal: decimal=','后跟一个pd.read_csv和decimal=decimal之类的简单东西要复杂得多。各位朋友是不是真的知之甚少,以至于用一个相当冗长的参数european_decimal = True将它包装在一个函数中太难实现了? -
您可以使用
locale:import locale locale.localeconv()['decimal_point']将输出小数点字符,但问题仍然是它取决于您的数据。如果数据格式一致 -
最后我应用了@ALollz 解决方案,我只是将任何带逗号的字符串转换为带点的字符串:for column in list_data_columns: df1[column]=df1[column].astype(str).str .replace(",",".").astype(float)
标签: python pandas european-data-format