87 votes

pandas select from Dataframe using startswith

Cela fonctionne (en utilisant Pandas 12 dev)

table2=table[table['SUBDIVISION'] =='INVERNESS']

Puis j'ai réalisé que je devais sélectionner le champ en utilisant "commence par" car il m'en manquait beaucoup. Donc, d'après la documentation de Pandas, j'ai essayé de faire ce qui suit

criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS'))
table2 = table[criteria]

J'ai obtenu AttributeError : l'objet 'float' n'a pas d'attribut 'startswith'.

J'ai donc essayé une autre syntaxe, avec le même résultat.

table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]]

Référence http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing Section 4 : Les compréhensions de liste et la méthode des séries de cartes peuvent également être utilisées pour produire des critères plus complexes :

Qu'est-ce que je rate ?

112voto

Andy Hayden Points 38010

Vous pouvez utiliser le str.startswith La méthode DataFrame permet d'obtenir des résultats plus cohérents :

In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan])

In [12]: s
Out[12]:
0      a
1     ab
2      c
3     11
4    NaN
dtype: object

In [13]: s.str.startswith('a', na=False)
Out[13]:
0     True
1     True
2    False
3    False
4    False
dtype: bool

et l'indexation booléenne fonctionnera très bien (je préfère utiliser l'option loc mais cela fonctionne tout de même sans) :

In [14]: s.loc[s.str.startswith('a', na=False)]
Out[14]:
0     a
1    ab
dtype: object

.

Il semble que l'un de vos éléments dans la série/colonne soit un float, qui n'a pas de méthode startswith, d'où l'AttributeError, la compréhension de la liste devrait soulever la même erreur...

27voto

Vinoj John Hosan Points 160

Pour récupérer toutes les lignes qui commencer par chaîne obligatoire

dataFrameOut = dataFrame[dataFrame['column name'].str.match('string')]

Pour récupérer toutes les lignes qui contient chaîne obligatoire

dataFrameOut = dataFrame[dataFrame['column name'].str.contains('string')]

9voto

Saurabh Points 1871

Utilisation de startswith pour une valeur de colonne particulière

df  = df.loc[df["SUBDIVISION"].str.startswith('INVERNESS', na=False)]

6voto

AleAve81 Points 186

Vous pouvez utiliser apply pour appliquer facilement n'importe quelle fonction de correspondance de chaîne à votre colonne par élément.

table2=table[table['SUBDIVISION'].apply(lambda x: x.startswith('INVERNESS'))]

en supposant que votre colonne "SUBDIVISION" est du type correct (chaîne de caractères).

Edit : correction des parenthèses manquantes

1voto

rachwa Points 307

Cela peut également être réalisé en utilisant query :

table.query('SUBDIVISION.str.startswith("INVERNESS").values')

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