使用Pandas导出到csv时如何指定数据类型和格式?

时间:2016-03-31 22:29:34

标签: python pandas

我有一个pandas数据框当前所有列都是浮点数,我使用DF.to_csv导出到csv文件。

我希望将其中一个列导出为int而不是float。第二列包含许多小数的数字,并以科学记数法格式导出。我希望以一定的精度导出为常规十进制数,而不是科学记数法。

假设我的DF名为DataOut,并且列'A','B'和'C'

我有什么可以添加到

DataOut.to_csv(filename, mode = 'w', header = False , index=False)

这样A中的值导出为int,B中的值导出为小数,最大精度为20位?

2 个答案:

答案 0 :(得分:3)

制作数据框的副本,将各列围绕整数,然后导出CSV:

import pandas as pd
import random
#generate a dataframe with two columns, both floating point
df = pd.DataFrame({'A':[random.random()*10 for i in range(10)],
                 'B':[random.random()*20 for i in range(10)]})
df2 = df.copy() #make a copy to preserve your original
df2.loc[:, 'A'] = df2['A'].apply(int) #convert A to an int
df2.loc[:, 'B'] = df2['B'].round(20) #round B to 20 points of precision
df2.to_csv('test.csv', header = None, index = False)

答案 1 :(得分:1)

表示浮动

Which works similarly for to_csv:

df.to_csv('df.csv', float_format='{:f}'.format, encoding='utf-8')

来源https://stackoverflow.com/a/23006399/4941927 也许用float_format也可以转换为int,但我不知道。

对于int转换我认为可以在解析器之前使用round()函数和生成器到普通文件,但我确定因为我从不使用panda

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html

我会看到你的完整代码@AlexKinman