gpt4 book ai didi

pandas - Python Pandas 十进制标记欧盟到美国

转载 作者:行者123 更新时间:2023-12-04 04:50:18 24 4
gpt4 key购买 nike

我把关于欧盟到美国小数点转换的邮件发红了,这些帮助很大,但我仍然觉得需要专家的帮助..我的数据来自 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)

这不起作用并导致“ 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 for 是第一种循环的 52 秒以上(和分组 .replace 是 32 秒)。

您将 DataFrames 从欧盟格式转换为美国格式的经验是什么?一些建议的改进方法? 'mapping' 或 'locale' 怎么样?他们会更快吗?

非常感谢,法比奥。

附言我意识到我是“冗长”而不是“pythonic”..抱歉抱歉..我还在学习...:-)

最佳答案

实际上 read_csv 中有一个千位和十进制参数
(见 pandas documentation read_csv
但不幸的是,两者还没有一起工作(见 issue: github issue )

关于pandas - Python Pandas 十进制标记欧盟到美国,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com