отбросить NaN, Нет типов данных при преобразовании кадра данных в список - PullRequest
0 голосов
/ 02 мая 2020

У меня есть фрейм данных

df = pd.DataFrame([["str",None,"aad","asd"],[None,"ddd",None,pd.NaT],["xyz",None,"abc",None],["btc","trz","abd",pd.NaT]],columns=list('ABCD'))

Я хочу, чтобы список содержал только строковые значения.

Пример:

[['str', 'aad', 'asd'],['ddd'], ['xyz','abc'], ['btc', 'trz', 'abd']]

Я пытался

df.values.tolist()

но я получил полный список со значениями None, NaT и NaN.

есть ли способ просто сохранить строковые значения и отбросить другие типы данных?

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

Если хотите удалить NaN, None и NaT используйте notna используйте понимание списка с другим, вложенным в filtarion:

a = [[y for y in x if pd.notna(y)] for x in df.values.tolist()]
print (a)
[['str', 'aad', 'asd'], ['ddd'], ['xyz', 'abc'], ['btc', 'trz', 'abd']]

Или если хотите фильтр только условия используют isinstance для условия:

a = [[y for y in x if isinstance(y, str)] for x in df.values.tolist()]
1 голос
/ 02 мая 2020
I hope this gives you implicit understanding about what @jezrael explains

whole_list=[]
for row in df.values.tolist():
    partial_list=[]
    for column in row:
        if pd.notna(column):
            partial_list.append(column)
    whole_list.append(partial_list)
whole_list    
1 голос
/ 02 мая 2020

вы можете легко удалить их с помощью метода, который pandas предоставил имя dropna(), чтобы вы могли использовать его как для индекса, так и для столбца, который вы можете использовать как ..

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

в вашем случае df .dropna () если вы хотите удалить из столбца, вы передадите axis = 1, и по умолчанию он равен нулю. также вы можете использовать документацию для получения более подробной информации https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

при этом будет отброшена вся строка или столбцы, вы также можете использовать некоторые функции для проверки, вы можете использовать notnull() или fillna() за это. я надеюсь, что это поможет

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