我需要在文本文件中写一个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)
的任何建议答案 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