2 votes

Erreur de filtrage de listes dans un dataframe pandas

Normalement, on filtre un Dataframe pandas comme suit :

import pandas as pd
df = pd.read_csv(...)
df_filtered = df[df['column'] == value]

J'ai le cadre de données suivant df1 :

numbers    letters   other_columns
0          [A]     ....
1          [A]     ....
2          [C]     ....
3          [B]     ....
4          [B]     ....
5          [A]     ....
...        ....

Je pensais que les entrées dans letters étaient des chaînes de caractères, mais ce sont en fait des listes :

type(df1.letters.ix[0]) 

sorties list

J'ai donc essayé de filtrer le cadre de données. df1 pour n'avoir que [A] rangs.

C'est-à-dire only_A devrait ressembler :

numbers    letters   other_columns
0          [A]     ....
1          [A]     ....
5          [A]     ....
...        ....

Cependant, si j'essaie de filtrer avec le code

only_A = df1[df1['letters'] == list('A')]

Je reçois une erreur, une ValueError

ValueError: Arrays were different lengths: 3076 vs 1

Quelle est la manière correcte de filtrer ce cadre de données ?

2voto

flyingmeatball Points 2090

Si vous pensiez que le contenu des lettres était des chaînes de caractères, pourriez-vous convertir la colonne des listes en chaînes de caractères ? quelque chose comme ceci :

df['letters'] = df['letters'].apply(lambda x: ''.join(x)) 

Ensuite, procédez au filtrage comme vous le feriez normalement

2voto

root Points 15363

Vous pouvez utiliser Series.str.join pour effectuer le filtrage sans modifier le DataFrame.

df[df['letters'].str.join('') == 'A']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X