Pandas Dataframe.to_csv decimal =','不起作用

时间:2016-07-13 12:42:39

标签: python csv pandas

在Python中,我将我的Pandas Dataframe编写为csv文件,并希望将小数分隔符更改为逗号(,)。像这样:

results.to_csv('D:/Data/Kaeashi/BigData/ProcessMining/Voorbeelden/Voorbeeld/CaseEventsCel.csv', sep=';', decimal=',')

但是csv文件中的小数分隔符仍然是. 为什么?我做错了什么?

5 个答案:

答案 0 :(得分:2)

如果decimal参数不起作用,可能是因为列的类型为object。 (当您执行dtype时)检查最后一行的df[column_name]

如果某些行的值无法解析为数字,则会发生这种情况。

您可以强制列更改类型: Change data type of columns in Pandas。 但这可能会让你失去那一栏中的非数字数据。

答案 1 :(得分:1)

0.16.0

之前未添加此功能
  

在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')