如何通过列中的值过滤数据框?

时间:2019-02-27 02:27:02

标签: python pandas filter

在python3和pandas中,我具有以下数据框:

nao_eleitos.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1549 entries, 5 to 5174
Data columns (total 15 columns):
SG_UF                            1549 non-null object
DS_CARGO                         1549 non-null object
SQ_CANDIDATO                     1549 non-null object
NM_CANDIDATO                     1549 non-null object
NM_URNA_CANDIDATO                1549 non-null object
NR_CPF_CANDIDATO                 1549 non-null object
SG_PARTIDO                       1549 non-null object
DT_NASCIMENTO                    1549 non-null object
NR_IDADE_DATA_POSSE              1549 non-null int64
NR_TITULO_ELEITORAL_CANDIDATO    1549 non-null object
DS_GENERO                        1549 non-null object
DS_SIT_TOT_TURNO                 1549 non-null object
QT_VOTOS_NOMINAIS                1549 non-null int64
VR_RECEITA_FUNDOS                1549 non-null float64
custo_por_voto                   1549 non-null float64
dtypes: float64(2), int64(2), object(11)
memory usage: 193.6+ KB

“ custo_por_voto”列具有现金价值。我需要过滤大于或等于1,904的值

nao_eleitos[['custo_por_voto']].head()
custo_por_voto
    1.9940
    3.6092
    35,500.0000
    1.1461
    30,000.0000

因此,我尝试使用变量布尔值进行过滤:

seleciona = nao_eleitos['custo_por_voto'] >= 1,904
valores_altos = nao_eleitos[seleciona]

但是我有这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-87-ffe42c00da2f> in <module>
      1 seleciona = nao_eleitos['custo_por_voto'] >= 1,904
      2 
----> 3 valores_altos = nao_eleitos[seleciona]

~/Documentos/Code/laranjas/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2925             if self.columns.nlevels > 1:
   2926                 return self._getitem_multilevel(key)
-> 2927             indexer = self.columns.get_loc(key)
   2928             if is_integer(indexer):
   2929                 indexer = [indexer]

~/Documentos/Code/laranjas/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2654                                  'backfill or nearest lookups')
   2655             try:
-> 2656                 return self._engine.get_loc(key)
   2657             except KeyError:
   2658                 return self._engine.get_loc(self._maybe_cast_indexer(key))

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

TypeError: '(5        True
6        True
7        True
8        True
10       True
11       True
27       True
28       True
34      False
35       True
37       True
40       True
47       True
51       True
52       True
55       True
57       True
61       True
62       True
67       True
73       True
77       True
84       True
86      False
88       True
89       True
91      False
92      False
94       True
98       True
        ...  
5065     True
5067     True
5070     True
5074    False
5081     True
5084     True
5098     True
5099     True
5100     True
5104     True
5107     True
5111     True
5112     True
5113     True
5114    False
5123    False
5126     True
5136     True
5147    False
5149     True
5150     True
5155     True
5158     True
5162     True
5166     True
5167     True
5168     True
5170     True
5172     True
5174     True
Name: custo_por_voto, Length: 1549, dtype: bool, 904)' is an invalid key

此条件导致当值> = 1,904时具有True的布尔变量,对吗?否则为假

之后,我们可以使用此布尔变量过滤数据框

请,有人知道该错误的原因吗?还是更好的过滤方式?

1 个答案:

答案 0 :(得分:2)

您不应将accounting的格式float

seleciona = nao_eleitos['custo_por_voto'] >= 1904