web-dev-qa-db-fra.com

Vérifiez si une certaine valeur est contenue dans une colonne dataframe dans pandas

J'essaie de vérifier si une certaine valeur est contenue dans une colonne python. J'utilise df.date.isin(['07311954'])] _, ce qui ne fait aucun doute pour être un bon outil. Le problème c’est que j’ai plus de 350 000 lignes et que la sortie ne les montre pas toutes afin que je puisse voir si la valeur est réellement contenue. En d'autres termes, je veux simplement savoir (O ​​/ N) si une valeur spécifique est contenue ou non dans une colonne, mon code suit:

import numpy as np
import pandas as pd
import glob


df = (pd.read_csv('/home/jayaramdas/anaconda3/Thesis/FEC_data/itpas2_data/itpas214.txt',\
    sep='|', header=None, low_memory=False, names=['1', '2', '3', '4', '5', '6', '7', \
    '8', '9', '10', '11', '12', '13', 'date', '15', '16', '17', '18', '19', '20', \
    '21', '22']))

df.date.isin(['07311954'])
16
Michael Perdue

Je pense que vous avez besoin de str.contains , si vous avez besoin de lignes où les valeurs de la colonne date contiennent la chaîne 07311954:

print df[df['date'].astype(str).str.contains('07311954')]

Ou si type de date colonne est string:

print df[df['date'].str.contains('07311954')]

Si vous voulez vérifier les 4 derniers chiffres de string1954 dans la colonne date:

print df[df['date'].astype(str).str[-4:].str.contains('1954')]

Échantillon:

print df['date']
0    8152007
1    9262007
2    7311954
3    2252011
4    2012011
5    2012011
6    2222011
7    2282011
Name: date, dtype: int64

print df['date'].astype(str).str[-4:].str.contains('1954')
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
Name: date, dtype: bool

print df[df['date'].astype(str).str[-4:].str.contains('1954')]
     cmte_id trans_typ entity_typ state  employer  occupation     date  \
2  C00119040       24K        CCM    MD       NaN         NaN  7311954   

   amount     fec_id    cand_id  
2    1000  C00140715  H2MD05155  
13
jezrael

Vous pouvez simplement utiliser ceci:

'07311954' in df.date.values Qui renvoie True ou False


Voici l'explication supplémentaire:

Dans les pandas, utiliser incheck directement avec DataFrame et Series (par exemple, val in df Ou val in series) Vérifiera si le val est contenu dans le Index.

MAIS vous pouvez toujours utiliser in vérifier leurs valeurs aussi (au lieu d'index)! En utilisant simplement val in df.col_name.values Ou val in series.values. De cette façon, vous vérifiez réellement le val avec un tableau Numpy.

Et .isin(vals) est l'inverse, il vérifie si les valeurs DataFrame/Series sont dans le vals. Ici, vals doit être défini ou ressemblant à une liste. Donc, ce n'est pas la façon naturelle d'aller pour la question.

26
YaOzI

Vous pouvez utiliser any:

print any(df.column == 07311954)
True       #true if it contains the number, false otherwise

Si vous voulez plutôt voir combien de fois '07311954' apparaît dans une colonne, vous pouvez utiliser:

df.column[df.column == 07311954].count()
15
Deusdeorum