当我从列表创建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]
答案 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'