将dataframe转换为list时删除NaN、None数据类型

2024-09-28 01:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框

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()

但我得到了一个完整的列表,其中没有NaT和NaN值

有没有办法只保留字符串值并删除其他数据类型


Tags: 字符串nonedf列表natpdbtcabc
3条回答

如果要删除NaNNoneNaT使用^{}使用列表理解和另一个与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()]

您可以使用提供名称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()进行检查。 我希望有帮助

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    

相关问题 更多 >

    热门问题