我有一个数据框,其中一些列包含空列表,其他列包含字符串列表:
donation_orgs donation_context 0 [] [] 1 [the research of Dr. ...] [In lieu of flowers , memorial donations ...]
我正在尝试返回没有任何有空列表的行的数据集.
我试过检查空值:
dfnotnull = df[df.donation_orgs != []] dfnotnull
和
dfnotnull = df[df.notnull().any(axis=1)] pd.options.display.max_rows=500 dfnotnull
我已经尝试循环并检查存在的值,但我认为列表不会像我认为的那样返回Null或None:
dfnotnull = pd.DataFrame(columns=('donation_orgs', 'donation_context')) for i in range(0,len(df)): if df['donation_orgs'].iloc(i): dfnotnull.loc[i] = df.iloc[i]
上述所有三种方法都只返回原始数据帧中的每一行.=
为避免转换str
并实际使用list
s,您可以这样做:
df[df['donation_orgs'].map(lambda d: len(d)) > 0]
它将donation_orgs
列映射到每行列表的长度,并仅保留具有至少一个元素的列,过滤掉空列表.
它回来了
Out[1]: donation_context donation_orgs 1 [In lieu of flowers , memorial donations] [the research of Dr.]
正如所料.
您可以尝试切片,就像数据框是字符串而不是列表一样:
import pandas as pd df = pd.DataFrame({ 'donation_orgs' : [[], ['the research of Dr.']], 'donation_context': [[], ['In lieu of flowers , memorial donations']]}) df[df.astype(str)['donation_orgs'] != '[]'] Out[9]: donation_context donation_orgs 1 [In lieu of flowers , memorial donations] [the research of Dr.]