J'ai un bloc de données avec quelques colonnes avec des listes vides et d'autres avec des listes de chaînes:
donation_orgs donation_context
0 [] []
1 [the research of Dr. ...] [In lieu of flowers , memorial donations ...]
J'essaie de renvoyer un ensemble de données sans aucune des lignes où il y a des listes vides.
J'ai juste essayé de vérifier les valeurs nulles:
dfnotnull = df[df.donation_orgs != []]
dfnotnull
et
dfnotnull = df[df.notnull().any(axis=1)]
pd.options.display.max_rows=500
dfnotnull
Et j'ai essayé de parcourir et de vérifier les valeurs qui existent, mais je pense que les listes ne renvoient pas Null ou None comme je le pensais:
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]
Les trois méthodes ci-dessus renvoient simplement chaque ligne du bloc de données d'origine. =
Vous pouvez essayer de découper comme si le bloc de données était des chaînes au lieu de listes:
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.]
Pour éviter de convertir en str
et utiliser réellement les list
s, vous pouvez procéder comme suit:
df[df['donation_orgs'].map(lambda d: len(d)) > 0]
Il mappe le donation_orgs
colonne à la longueur des listes de chaque ligne et ne conserve que celles qui ont au moins un élément, filtrage des listes vides.
Il revient
Out[1]:
donation_context donation_orgs
1 [In lieu of flowers , memorial donations] [the research of Dr.]
comme prévu.
Vous pouvez utiliser la doublure suivante:
df[(df['donation_orgs'].str.len() != 0) | (df['donation_context'].str.len() != 0)]