我把关于欧盟到美国小数点转换的邮件发红了,这些帮助很大,但我仍然觉得需要专家的帮助.. 我的数据来自 ERP 系统,数字格式为“1'000' 000,32”,我想简单地转换成“1000000.32”之类的东西,以便在 Pandas 中进一步处理。
我从欧盟开始获取美国格式的实际解决方案如下:
...
# read_csv and merge, clean .. different CSV files
# result = merge (some_DataFrame_EU_format, ...)
...
result.to_csv(path, sep';')
result = read_csv(path, sep';', converters={'column_name': lambda x: float(x.replace ('.','').replace(',','.'))})
....
result.to_csv(path, sep';')
我觉得这是用“。”更改“,”的缓慢方法。由于 read_csv 和 to_csv(以及磁盘 ..),所以愿意直接在 DataFrame 上尝试 .replace 方法以节省一些处理时间。
我最初的尝试是这样的(我在论坛的其他地方发红了..):
result['column_name'] = result['column_name'].replace( '.', '')
result['column_name'] = result['column_name'].replace( ',', '.')
result['column_name'] = result['column_name'].astype(float)
这不起作用并导致“浮点文字无效”错误。
我很感动:
for i in range (0, len(result)):
result.ix[i,'column_name'] = result.ix[i,'column_name'].replace( '.', '')
result.ix[i,'column_name'] = result.ix[i,'column_name'].replace( ',', '.')
result['column_name'] = result['column_name'].astype(float)
以上工作..但令人惊讶的是,它似乎比 read_csv/converters 解决方案慢了大约 3 倍。使用以下内容在某种程度上有所帮助:
for i in range (0, len(result)):
result.ix[i,'column_name'] = result.ix[i,'column_name'].replace( '.', '').replace( ',', '.')
result['column_name'] = result['column_name'].astype(float)
我红了精美的手册..并且知道 read_csv 已经过优化..但并没有真正期望 red / write /read/ write cicle 比 for 循环快三倍!
你认为在这方面做更多工作是否值得?有什么建议吗?还是继续使用重复的写/读/写方法更好?
我的文件大约有 30k 行 x 150 列,读/写/读(转换)/写大约需要 18 秒,第一种循环的 .ix 超过 52 秒(分组 .replace 为 32 秒)。
您将 DataFrames 从欧盟格式转换为美国格式有什么经验?一些建议的改进方法?'映射'或'语言环境'呢?他们会更快吗?
非常感谢你,法比奥。
PS我意识到我很“冗长”,还不够“pythonic”..对不起对不起..我还在学习......:-)