Объединять только целые числа из списка, содержащего значения NaN [Python] - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующий список, который содержит целые числа и значения nan:

x = [8, 8, 3, 3, 2, 9, nan, nan, nan, 4, 1, 9, 4, 8, 2, nan, nan, nan, nan, 2, 2, 1, 1, 1, 2, nan, nan, nan, nan, 4, 1, 9, 5, 8, 3, 8, 8, 8, 3, 4, 2, nan]

Я хочу объединить целые числа, чтобы они стали одним числом, а значения nan остались на своих местах. Также каждый новый номер должен содержать 6 цифр.

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

x = [883329, nan, nan, nan, 419482, nan, nan, nan, nan, 221112, nan, nan, nan, nan, 419583, 888342, nan]

Я попробовал следующий код, но это не то, что я хочу

y =''.join(str(n) for n in x)
k=list(map(''.join, zip(*[iter(y)]*6))) 
k = [883329, nannan, nan419, 482nan, nannan, nan221, 112nan, nannan, nan419, 583888, 342nan]

Есть предложения, как это исправить?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете сделать следующее, используя groupby и рецепт grouper :

from numpy import nan, isnan
from itertools import groupby, zip_longest

x = [8, 8, 3, 3, 2, 9, nan, nan, nan, 4, 1, 9, 4, 8, 2, nan, nan, nan, nan, 2, 2, 1, 1, 1, 2, nan, nan, nan, nan, 4, 1,
     9, 5, 8, 3, 8, 8, 8, 3, 4, 2, nan]


def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(fillvalue=fillvalue, *args)


result = []
for k, v in groupby(x, key=isnan):
    if k:
        result.extend(list(v))
    else:
        result.extend(int(''.join(g)) for g in grouper(6, map(str, v)))

print(result)

выход

[883329, nan, nan, nan, 419482, nan, nan, nan, nan, 221112, nan, nan, nan, nan, 419583, 888342, nan]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...