我有一个数据框
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值的完整列表。
有没有办法只保留字符串值而删除其他数据类型?
发布于 2020-05-02 17:51:05
如果想要删除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()]发布于 2020-05-02 18:33:08
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 发布于 2020-05-02 17:58:08
您可以使用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()进行检查。我希望它能帮上忙
https://stackoverflow.com/questions/61557363
复制相似问题