检查pandas中的dataframe列中是否包含某个值

时间:2016-03-12 10:51:54

标签: python pandas dataframe

我正在尝试检查python列中是否包含某个值。我正在使用df.date.isin(['07311954']),我不怀疑它是一个很好的工具。问题是我有超过350K的行,输出将不会显示 所有这些,以便我可以看到值是否实际包含。简而言之,我只想知道(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'])

3 个答案:

答案 0 :(得分:24)

你可以简单地使用它:

'07311954' in df.date.values返回TrueFalse

以下是进一步的解释:

在pandas中,使用in直接检查DataFrame和系列(例如val in dfval in series)将检查{strong>索引<中是否包含val /强>

但你仍然可以使用in检查他们的值(而不是索引)!只需使用val in df.col_name.valuesval in series.values。通过这种方式,您实际上正在使用Numpy数组检查val

.isin(vals)是另一种方式,它会检查DataFrame / Series值是否在 vals中。此处vals必须设置或列表。所以这不是解决问题的自然方式。

答案 1 :(得分:15)

您可以使用@RouteConfig

any

如果您想查看&#39; 07311954&#39; 在列中出现的次数,您可以使用:

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

答案 2 :(得分:9)

我认为您需要str.contains,如果您需要列date的值包含字符串07311954的行:

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

type列的datestring

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

如果您想检查string列中1954 date的最后4位数字:

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