Pandas DataFrame到csv:为混合类型指定小数分隔符

时间:2017-03-15 13:49:04

标签: python csv pandas

当我从列表创建Pandas DataFrame并将其转换为具有特定小数分隔符的csv时,我发现了一种奇怪的行为。

这可以按预期工作:

+---+----+----+--------+--------+--------+---------+---------+---------+
| ID|TYPE|CODE|e_TYPE_A|e_TYPE_B|e_TYPE_C|e_CODE_X1|e_CODE_X2|e_CODE_X3|
+---+----+----+--------+--------+--------+---------+---------+---------+
|  1|   A|  X1|       1|       0|       0|        1|        0|        0|
|  2|   C|  X2|       0|       0|       1|        0|        1|        0|
|  3|   B|  X3|       0|       1|       0|        0|        0|        1|
|  2|   B|  X2|       0|       1|       0|        0|        1|        0|
|  3|   C|  X2|       0|       0|       1|        0|        1|        0|
|  1|   B|  X3|       0|       1|       0|        0|        0|        1|
|  1|   B|  X1|       0|       1|       0|        1|        0|        0|
|  1|   C|  X1|       0|       0|       1|        1|        0|        0|
+---+----+----+--------+--------+--------+---------+---------+---------+

但是,在这种情况下,小数分隔符设置不正确:

>>> import pandas as pd
>>> a = pd.DataFrame([['a', 0.1], ['b', 0.2]])
>>> a
   0    1
0  a  0.1
1  b  0.2
>>> a.to_csv(decimal=',', sep=' ')
' 0 1\n0 a 0,1\n1 b 0,2\n'

当我转换>>> b = pd.DataFrame([['a', 'b'], [0.1, 0.2]]) >>> b 0 1 0 a b 1 0.1 0.2 >>> b.to_csv(decimal=',', sep=' ') ' 0 1\n0 a b\n1 0.1 0.2\n' 以获取类似b的数据框时,小数分隔符仍未正确设置:

a

为什么我要问:在我的程序中,我将列作为单独的列表(例如>>> b.T.to_csv(decimal=',', sep=' ') ' 0 1\n0 a 0.1\n1 b 0.2\n' col1 = ['a', 'b'],但列的数量和格式可能会有所不同),我想将它们转换为csv使用特定的小数分隔符,所以我希望有一个像

这样的输出
col2 = [0.1, 0.2]

1 个答案:

答案 0 :(得分:1)

使用applymap并通过明确检查其类型,将float类型的单元格转换为str。然后,用逗号(.)替换小数点(,),因为每个单元格现在构成一个字符串,稍后将内容转储到csv文件。

b.applymap(lambda x: str(x).replace(".", ",") if isinstance(x, float) else x).to_csv(sep=" ")
# ' 0 1\n0 a b\n1 0,1 0,2\n'