首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将数据帧转换为列表时删除NaN,无数据类型

在将数据帧转换为列表时删除NaN,无数据类型
EN

Stack Overflow用户
提问于 2020-05-02 17:48:26
回答 3查看 800关注 0票数 0

我有一个数据框

代码语言:javascript
复制
df = pd.DataFrame([["str",None,"aad","asd"],[None,"ddd",None,pd.NaT],["xyz",None,"abc",None],["btc","trz","abd",pd.NaT]],columns=list('ABCD'))

我想要一个只包含字符串值的列表。

示例:

代码语言:javascript
复制
[['str', 'aad', 'asd'],['ddd'], ['xyz','abc'], ['btc', 'trz', 'abd']]

我试过了

代码语言:javascript
复制
df.values.tolist()

但我得到了包含None、NaT和NaN值的完整列表。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-02 17:51:05

如果想要删除NaNNoneNaT会使用notna来使用列表理解,而另一个则嵌套在filtarion中:

代码语言:javascript
复制
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用于条件:

代码语言:javascript
复制
a = [[y for y in x if isinstance(y, str)] for x in df.values.tolist()]
票数 2
EN

Stack Overflow用户

发布于 2020-05-02 18:33:08

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-05-02 17:58:08

您可以使用pandas提供的名为dropna()的方法轻松地删除它们,这样您就可以将其用于索引或列,您可以像这样使用它。

代码语言:javascript
复制
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()进行检查。我希望它能帮上忙

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61557363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档