Как эффективно преобразовать информационный кадр в списки, отбрасывающие N - PullRequest
0 голосов
/ 25 июня 2019

Каков эффективный способ преобразования данных в списки? При этом я хочу отбросить значения nan, что приведет к неравному размеру списка.

Я могу легко преобразовать фрейм данных в список списков с помощью:

df_sequences = df.values.tolist()

Однако в нем много значений nan, которые подходят для информационного кадра, но я не хочу их в списках. Поэтому я попытался также включить numpy:

test = np.array([[1,2,3],[np.nan,2,3]])
print(test)
print(~numpy.isnan(test))
x = test[~numpy.isnan(test)]
x

К сожалению, я не понял, почему форма изменена в приведенном выше примере, вывод:

[[ 1.  2.  3.]
 [nan  2.  3.]]
[[ True  True  True]
 [False  True  True]]
array([1., 2., 3., 2., 3.])

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

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Я думаю, вы ищете что-то вроде этого:

lists_not_nan = map(lambda row: filter(lambda val: not np.isnan(val), row), df.values)
0 голосов
/ 25 июня 2019

Природа массивов numpy (и, соответственно, pandas DataFrames) заключается в том, что они имеют согласованные размеры.Так, например, каждая строка будет иметь то же количество столбцов, что и каждая другая строка.

Чтобы сделать то, что вы хотите в Python, я думаю, потребуется вложенное list понимание:

[[element for element in row if ~np.isnan(element)] for row in df.values.tolist()]
...