Проверьте, содержится ли определенное значение в столбце 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'])
Ответы
Ответ 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()