Печать данных с помощью int и nan в csv - PullRequest
0 голосов
/ 14 марта 2020

У меня есть датафрейм, как показано ниже:

import pandas as pd
import numpy as np

df = pd.DataFrame([{'int':1, 'float':1.1, 'str':'aaa'}, {'int':None, 'float':None, 'str':None}])

df.fillna('', inplace=True)

Мы хотим вывести df в csv, как показано ниже (используя '# | #' в качестве разделителя полей), сохраняя int как int:

int#|#float#|#str
1#|#1.1#|#aaa
#|##|#

Как мне этого добиться?

Обходное решение работает ниже, но мой DataFrame огромен, и мне интересно, есть ли лучший / более эффективный способ:

df['int'] = df['int'].apply(lambda x: ('%.0f' % x) if x != '' else x)
np.savetxt('test.txt', df[['int', 'float', 'str']].values, fmt='%s', delimiter='#|#', newline="\n")

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Хитрость здесь в том, чтобы заставить типы столбцов obj. Это требуется только для столбца int, но должно быть сделано до того, как pandas записывает значение NaN в столбец целых чисел. Когда это происходит, столбец преобразуется в число с плавающей точкой.

Таким образом, вы можете сделать:

df = pd.DataFrame([{'int':1, 'float':1.1, 'str':'aaa'}, {'int':None, 'float':None, 'str':None}], dtype=object)

df.fillna('', inplace=True)

Вы получите:

  float int  str
0   1.1   1  aaa
1               
0 голосов
/ 14 марта 2020

Насколько я понимаю, вы не можете сбросить информационный кадр в кабину с разделителем #. Кабина автоматически применяется, как разделитель. Вы можете преобразовать ваш фрейм данных в файл CSV, используя метод to_csv класса pandas фрейма данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...