如何将dataframe.to_csv(...)中的float_format仅设置为特定列,而不是其他列?

时间:2015-02-11 19:53:09

标签: pandas

我的框架包含6列float64数据。

A B C D E F
  1. 如何更改数据框以取代EF uint64?或
  2. 如何告诉to_csv()仅打印EF的浮点数的整数部分?

2 个答案:

答案 0 :(得分:0)

尝试使用.astype()方法。

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.astype.html

import numpy as np
import pandas as pd

df = pd.DataFrame({'sample': np.random.choice([1, 2], 100, replace=True),
                   'x': np.random.uniform(size=100),
                   'y': np.random.normal(size=100),
                   'z': np.random.choice([1,5,7,3,9],100, replace=True)})
#Creates this DF 
    sample         x         y
0        1  0.249924  0.565061
1        1  0.707201  0.626478
2        2  0.897220 -1.103307
3        2  0.818712 -0.924300
4        1  0.374754  3.138215
5        2  0.979895 -2.722585
6        1  0.193894 -0.419265
7        1  0.675562 -1.835672
8        2  0.582984 -0.304816
9        2  0.347588  0.406904
10       1  0.053714 -0.252964
11       2  0.709975 -0.412066
12       1  0.495868 -1.173759
13       1  0.605189  0.830502
14       1  0.973732  0.109461
15       1  0.389914  0.144190
16       2  0.030194 -1.413897
17       2  0.554663 -2.613892
18       2  0.644484 -0.165491
19       2  0.991261 -0.711845
#Writes Integer CSV
df.applymap(lambda x: x.astype(int)).to_csv('mycsv.csv')

    sample  x  y
0        1  0  0
1        1  0  0
2        2  0 -1
3        2  0  0
4        1  0  3
5        2  0 -2
6        1  0  0
7        1  0 -1
8        2  0  0
9        2  0  0
10       1  0  0
11       2  0  0
12       1  0 -1
13       1  0  0
14       1  0  0
15       1  0  0
16       2  0 -1
17       2  0 -2
18       2  0  0
19       2  0  0

答案 1 :(得分:0)

to_csv方法中没有内置选项,允许您自定义特定浮点列的格式(至少不是版本0.15.2)。只有毯子float_format参数会影响所有浮点列。

相反,我们可以使用E更改Fastype列的dtype:

df[['E','F']] = df[['E','F']].astype('uint64')

请注意,这不是"就地"。 Python评估右手 首先,生成一个包含两列dtype uint64的新DataFrame,以及 然后将这些值复制到df。在引擎盖下,熊猫存储的列 不同的dtype在不同的"块"。必须为区块分配空间 不同的dtype;你不能拆分现有区块的一部分并进行更改 它的dtype和值。据我所知,没有办法改变 dtype in the place。


import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.random((3,6))*100, columns=list('ABCDEF'))
df[['E','F']] = df[['E','F']].astype('uint64')
df.to_csv('/tmp/out')

写入/tmp/out内容,如

,A,B,C,D,E,F
0,80.81297403001469,19.445657677067153,12.108345468895742,61.25250634077517,37,85
1,51.109960070270176,71.1000927186083,13.221739366008457,64.20402135661978,19,60
2,27.114372274697264,0.44017074777940035,21.090083439236174,86.57480550319143,79,98