pd.to_csv用list设置float_format

时间:2018-06-12 12:24:19

标签: python pandas

我需要在文本文件中写一个df,为磁盘节省一些空间我想设置每列的小数位数,即每列的宽度不同。

我试过了:

df = pd.DataFrame(np.random.random(size=(10, 4)))
df.to_csv(path, float_format=['%.3f', '%.3f', '%.3f', '%.10f']) 

但这不起作用;

  

TypeError:%:'list'和'float'

的不支持的操作数类型

有关如何使用pandas(版本0.23.0)

的任何建议

4 个答案:

答案 0 :(得分:3)

你可以这样做:

 df.iloc[:,0:3] = df.iloc[:,0:3].round(3)
 df['d'] = df['d'].round(10)
 df.to_csv('path')

答案 1 :(得分:2)

感谢所有的答案,受到@Joe的启发我想出了:

df = df.round({'a':3, 'b':3, 'c':3, 'd':10})

或更一般地

df = df.round({c:r for c, r in zip(df.columns, [3, 3, 3, 10])})

这是一种解决方法,并没有回答原始问题,round修改了可能不合需要的基础数据框。

答案 2 :(得分:0)

我通常这样做:

a['column_name'] = round(a['column_name'], 3)

然后你可以像往常一样将它导出到csv。

答案 3 :(得分:0)

您可以使用它适用于所有行和列值的applymap

df = pd.DataFrame(np.random.random(size=(10, 4)))
df.applymap(lambda x: round(x,2))

Out[58]: 
      0     1     2     3
0  0.12  0.63  0.47  0.19
1  0.06  0.81  0.09  0.56
2  0.78  0.85  0.42  0.98
3  0.58  0.39  0.73  0.68
4  0.79  0.56  0.77  0.34
5  0.16  0.20  0.94  0.89
6  0.34  0.79  0.54  0.27
7  0.70  0.58  0.05  0.28
8  0.75  0.53  0.37  0.64
9  0.57  0.68  0.59  0.84