бросить на для кортежей в серии Python - PullRequest
0 голосов
/ 02 марта 2020

Допустим, у меня есть серия

 a = pd.Series([(1,2), (3,4), (float('NaN'),float('NaN'))])

Как удалить (нан, нан) из серии?

С уважением,

Ответы [ 4 ]

1 голос
/ 02 марта 2020

Предполагая, что вы хотите сохранить только пары, не содержащие значений NaN, вы можете сделать:

a = a[~ a.apply(lambda x: np.isnan(x[0] or np.isnan(x[1])))]
0 голосов
/ 02 марта 2020

Много хороших ответов, но вы также можете попробовать это:

pd.Series([(x,y) for (x,y) in a if ~np.isnan(x) and ~np.isnan(y)])
0 голосов
/ 02 марта 2020

Вы можете попробовать это:

a = pd.Series([(1,2), (3,4), (float('NaN'),float('NaN'))])

def func(t):
    if not pd.isna(t[0]) and not pd.isna(t[1]):
        return True
    else:
        return False

a = a[a.apply(func)]
print(a)

Вывод:

0    (1, 2)
1    (3, 4)
dtype: object
0 голосов
/ 02 марта 2020

Если вы хотите через pandas, сначала отфильтруйте разобранный фрейм данных

df[['x', 'y']] = pd.DataFrame(a.tolist(), index=a.index)  
df.dropna(how='all', inplace=True)

, затем вернитесь к списку кортежей

new_tuples = [tuple(x) for x in df.to_numpy()]
...