2016-03-31 1 views
1

У меня есть кадр данных pandas, в настоящее время все столбцы - это float, которые я экспортирую в файл csv с использованием DF.to_csv.Как указать тип и формат данных при экспорте в csv с помощью Pandas?

Я хотел бы, чтобы один из столбцов был экспортирован как int, а не как float. Второй столбец имеет номера с большим количеством десятичных знаков и экспортируется в формате научной нотации. Я хочу быть экспортированным в виде обычного десятичного числа до определенной степени точности, а не в научной нотации.

Say мой DF называется DATAOUT и имеет столбцы 'A', 'B' и 'C'

Что я могу добавить к

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

Так что значения в A экспортируются как int, а значения в B экспортируются как десятичные числа с максимальной точностью 20 цифр?

+1

Почему бы просто не сделать копию «DataOut» с необходимыми изменениями, а затем вызывать '.to_csv()' на этой копии? –

ответ

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 конвертации Я думаю, что мог бы использовать функцию круглые() и генератор перед анализатором в обычный файл, но я уверен, потому что я никогда не использую панда

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

я хотел бы видеть ваши полный код @AlexKinman

3

Сделайте копию dataframe, вокруг соответствующих колонках Интс, а также экспортировать в 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)