我有一系列的字符串,我需要使用len()
對其應用布爾索引。Python Pandas:使用len()方法的系列上布爾索引的行爲不一致
在一種情況下,它的工作原理,在它沒有另一種情況:
工作情況下是在一個數據幀一groupby
,然後對得到的系列一unique()
和apply(str)
更改所得到numpy.ndarray
條目爲字符串:
import pandas as pd
df = pd.DataFrame({'A':['a','a','a','a','b','b','b','b'],'B':[1,2,2,3,4,5,4,4]})
dg = df.groupby('A')['B'].unique().apply(str)
db = dg[len(dg) > 2]
這只是正常工作,併產生期望的結果:
>>db
Out[119]: '[1 2 3]'
以下然而拋出KeyError: True
:
ss = pd.Series(['a','b','cc','dd','eeee','ff','ggg'])
ls = ss[len(ss) > 2]
兩個對象dg
和ss
只是字符串的系列:http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing
我:
>>type(dg)
Out[113]: pandas.core.series.Series
>>type(ss)
Out[114]: pandas.core.series.Series
>>type(dg['a'])
Out[115]: str
>>type(ss[0])
Out[116]: str
如文檔描述我下面的語法可以看到潛在的衝突,因爲len(ss)
本身返回系列本身的長度,現在該確切命令用於布爾索引ss[len(ss) > 2]
,但我希望這兩個例子都不起作用。
現在這種行爲似乎不一致,除非我失去了明顯的東西。
謝謝,這與兩者兼而有之。你能解釋一下,爲什麼第一個例子還在工作呢? – Khris
是的,我得到另一種解決方案,與第一個代碼一起工作。 – jezrael
如果將'df'改爲'df = pd.DataFrame({'A':['a','a','a','a','b','b',' b','b'],'B':[1,2,2,3,4,5,4,6]})'它不返回兩行。 – jezrael