2017-02-20 20 views
0

Я написал сценарий, который берет CSV-файл в качестве ввода, манипулирует данными с помощью pandas и создает другой файл csv.Pandas преобразует значения int в float в dataframe

Все в порядке, однако pandas преобразует целочисленные значения в двойные по умолчанию. , например.

в формате CSV перед:

5f684ee8-7398-914d-9d87-7b44c37ef081,France,44,72000,No,isBool("true") 

в CSV после:

E84E685F-9873-4D91-9D87-7B44C37EF081,France,44.0,72000.0,No,True 

Здесь 44 и 72000 заменяются на 44,0 и 72000,0

Я знаю, как превратить их в междунар с помощью применить() в dataframe, однако этот скрипт будет общим, и я сначала хочу настроить pandas.

В принципе, я ожидаю, что панды не ставят .0, если это не плавающее число.

Спасибо.

+2

Кажется, в столбцах некоторые 'значения NaN', поэтому' int' отливают 'float' – jezrael

+0

проверить его' ФР [ДФ [] ISNULL 'Col' (.)] и возможное решение заменяется на «NaN» на некоторый скаляр, например '0' -' df [['col', 'col1']] = df [['col', 'col1']]. fillna() ' – jezrael

+0

Вы пытались установить аргумент float_format pandas.DataFrame.to_csv в соответствии с вашими требованиями? http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html Кажется, он делает то, что вы хотите – tagoma

ответ

1

Как указано в комментариях, некоторые операции в пандах могут изменять типы данных. см. пример this page.

Раствор может быть:

df.to_csv(float_format="%.0f") 

, которые завершают каждый (ложь) с плавающей точкой в ​​формат целого числа.

Exemple:

In [355]: pd.DataFrame(columns=list(range(6)), 
data=[['E84E685F-9873-4D91-9D87-7B44C37EF081', 'France', 44.0, 72000, 'No', True]] 
).to_csv(float_format='%.f') 
Out[355]: ',0,1,2,3,4,5\n0,E84E685F-9873-4D91-9D87-7B44C37EF081,France,44,72000,No,True\n' 
+1

Спасибо за ответ, но когда я добавляю аргумент float_format, на этот раз панды округляют мои поплавки (например, 44.89 до 45), которые я не хочу. – skynyrd

+0

У вас еще есть решение? –

Смежные вопросы