在Python中,我将我的Pandas Dataframe编写为csv文件,并希望将小数分隔符更改为逗号(,
)。像这样:
results.to_csv('D:/Data/Kaeashi/BigData/ProcessMining/Voorbeelden/Voorbeeld/CaseEventsCel.csv', sep=';', decimal=',')
但是csv文件中的小数分隔符仍然是.
为什么?我做错了什么?
答案 0 :(得分:2)
如果decimal
参数不起作用,可能是因为列的类型为object
。 (当您执行dtype
时)检查最后一行的df[column_name]
值
如果某些行的值无法解析为数字,则会发生这种情况。
您可以强制列更改类型: Change data type of columns in Pandas。 但这可能会让你失去那一栏中的非数字数据。
答案 1 :(得分:1)
在to_csv中添加了十进制选项,以便为非'。'小数分隔符(GH781)
提供格式
将pandas升级到更新的东西,它会起作用。下面的代码使用10 minute tutorial和pandas版本0.18.1
foreach($books as $book => $price) {
if($book == $find) {
return $price;
}
}
这将创建一个“test.csv”文件,如下所示:
>>> import pandas as pd
>>> import numpy as np
>>> dates = pd.date_range('20130101', periods=6)
>>> df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
>>> df
A B C D
2013-01-01 -0.157833 1.719554 0.564592 -0.228870
2013-01-02 -0.316600 1.545763 -0.206499 0.793412
2013-01-03 1.905803 1.172803 0.744010 1.563306
2013-01-04 -0.142676 -0.362548 -0.554799 -0.086404
2013-01-05 1.708246 -0.505940 -1.135422 0.810446
2013-01-06 -0.150899 0.794215 -0.628903 0.598574
>>> df.to_csv("test.csv", sep=';', decimal=',')
答案 2 :(得分:0)
不知怎的,我也不能让它发挥作用。我总是最终使用以下脚本来纠正它。它很脏但它适用于我的目的:
for col in df.columns:
try:
df[col] = df[col].apply(lambda x: float(x.replace('.','').replace(',','.')))
except:
pass
编辑:误读了这个问题,你可以通过将所有浮点数改为字符串来反过来使用相同的策略:)。再说一次,你应该弄清楚它为什么不起作用。如果你让它发挥作用,应该发布。
答案 3 :(得分:0)
这个例子假设工作(因为它适用于我):
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(10))
with open('Data/out.csv', 'w') as f:
s.to_csv(f, index=True, header=True, decimal=',', sep=';', float_format='%.3f')
<强> out.csv:强>
; 0
0; 0,091
1; -0,009
2; -1,427
3; 0,022
4; -1,270
5; -1,134
6; -0,965
7; -1,298
8; -0,854
9; 0,150
我不确切地知道您的代码无法正常工作的原因,但无论如何,请尝试使用上述示例来满足您的需求。
答案 4 :(得分:0)
如果数据是对象而不是普通浮点类型,例如 python decimal.Decimal(10.12)
。首先,更改类型,然后写入 CSV 文件:
import pandas as pd
from decimal import Decimal
data_frame = pd.DataFrame(data={'col1': [1.1, 2.2], 'col2': [Decimal(3.3), Decimal(4.4)]})
data_frame.to_csv('report_decimal_dot.csv', sep=';', decimal=',', float_format='%.2f')
data_frame = data_frame.applymap(lambda x: float(x) if isinstance(x, Decimal) else x)
data_frame.to_csv('report_decimal_comma.csv', sep=';', decimal=',', float_format='%.2f')