Удалить 'Nan' из словаря списка - PullRequest
0 голосов
/ 21 февраля 2019

Мои данные содержат столбцы с пустыми строками, которые панды читают как nan.Я хочу создать словарь списка из этих данных.Тем не менее, некоторый список содержит nan, и я хочу удалить его.

Если я использую dropna() в data.dropna().to_dict(orient='list'), это удалит все строки, которые содержат хотя бы одну nan, поэтому я теряюdata.

Col1 Col2  Col3
a     x     r
b     y     v
c           x
            z



data = pd.read_csv(sys.argv[2], sep = ',')
dict = data.to_dict(orient='list')

Current output:
dict = {Col1: ['a','b','c',nan], Col2: ['x', 'y',nan,nan], Col3: ['r', 'v', 'x', 'z']}

Desire Output:
dict = {Col1: ['a','b','c'], Col2: ['x', 'y'], Col3: ['r', 'v', 'x', 'z']}

Моя цель: получить словарь списка, с помощью nan удалить из списка.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Не уверен, какой именно формат вы ожидаете, но вы можете использовать для этого списки и списки.

Сначала создайте некоторые данные.

import pandas as pd
import numpy as np

data = pd.DataFrame.from_dict({'Col1': (1, 2, 3), 'Col2': (4, 5, 6), 'Col3': (7, 8, np.nan)})
print(data)

Предоставление фрейма данных:

   Col1  Col2  Col3
0     1     4   7.0
1     2     5   8.0
2     3     6   NaN

И затем мы создаем словарь с помощью итератора.

dict_1 = {x[0]: [y for y in x[1:] if not pd.isna(y)] for x in data.itertuples(index=True) }

print(dict_1)
>>>{0: [1, 4, 7.0], 1: [2, 5, 8.0], 2: [3, 6]}

Сделать то же самое для столбцов еще проще:

dict_2 = {data[column].name: [y for y in data[column] if not pd.isna(y)] for column in data}

print(dict_2)
>>>{'Col1': [1, 2, 3], 'Col2': [4, 5, 6], 'Col3': [7.0, 8.0]}
0 голосов
/ 21 февраля 2019

Я не уверен, правильно ли я понимаю ваш вопрос, но если я понимаю, и вы хотите заменить nan на значение, чтобы не потерять ваши данные, тогда вы ищете pandas.DataFrame.fillna функция.Вы упомянули, что исходное значение - пустая строка, поэтому заполнение поля nan значением data.fillna('') заполняет его пустой строкой.

EDIT : После предоставления желаемого результата ответ наВаш вопрос немного меняется.Что вам нужно сделать, это использовать диктовку со списком для построения списка словаря, циклически по столбцу и фильтрации nan.Я вижу, что Эндрю уже предоставил код для этого в своем ответе, так что посмотрите.

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