Подтвердить что ты не робот

Проверьте, содержится ли определенное значение в столбце dataframe в pandas

Я пытаюсь проверить, содержится ли определенное значение в столбце python. Я использую df.date.isin(['07311954']), и я не сомневаюсь, что это хороший инструмент. Проблема в том, что у меня более 350 тыс. Строк, и результат не будет отображаться все они так, чтобы я мог видеть, действительно ли это значение. Проще говоря, я просто хочу знать (Y/N), содержится ли конкретное значение в столбце. Мой код:

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'])
4b9b3361

Ответ 1

Я думаю, вам нужно str.contains, если вам нужны строки, где значения столбца date содержат строку 07311954:

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

Или если type столбца date string:

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

Если вы хотите проверить последние 4 цифры для string 1954 в столбце date:

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

Пример:

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  

Ответ 2

Вы можете просто использовать это:

'07311954' in df.date.values, который возвращает True или False


Вот еще одно объяснение:

В pandas, используя in, проверьте непосредственно с DataFrame и Series (например, val in df или val in series), проверьте, содержится ли val в Индекс.

НО вы все еще можете использовать in для проверки своих значений (вместо индекса)! Просто используя val in df.col_name.values или val in series.values. Таким образом, вы фактически проверяете val на массив Numpy.

И .isin(vals) - это наоборот, он проверяет, находятся ли значения DataFrame/Series в vals. Здесь vals должен быть установленным или списком. Так что это не естественный способ решить этот вопрос.

Ответ 3

Вы можете использовать any:

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

Если вы хотите увидеть, сколько раз "07311954" встречается в столбце, вы можете использовать:

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