2016-02-11 96 views
3

我有一個超過10萬行的dF和幾列寬 - 沒有什麼瘋狂的。我試圖根據大約4000個字符串的列表對行進行子集劃分,但我正在努力弄清楚如何這樣做。有沒有一種方法來使用類似的子集。如何基於字符串值列表對熊貓數據框進行分類?

東風看起來像這樣

dog_name count 
=================== 
Jenny  2 
Fido   4 
Joey   7 
Yeller  2 

和字符串列表中包含的變量dog_name_list=['Fido', 'Yeller']

我試着沿 df[df['dog_name'].isin(dog_name_list)線的東西,但我得到一個有趣的錯誤: unhashable type: 'list'

我檢查了similar questiondocsthis的子集數據通過查看列表中是否存在某個值,但是這讓我無所適從,而且我對我所缺少的東西有些困惑。非常感謝別人的建議!

+0

檢查'dog_name'列中是否有任何列表:'any((在df.dog_name中v的isinstance(v,list)))' – Alexander

+0

您的命令是正確的,可能是Alexander指出的一個數據問題。 –

回答

3

我相信你的狗名列中有一個列表。

這工作得很好:

>>> df[df['dog_name'].isin(['Fido', 'Yeller'])] 
    dog_name count 
1  Fido  4 
3 Yeller  2 

但是,如果你添加一個列表:

df.ix[4] = (['a'], 2) 
>>> df 
    dog_name count 
0 Jenny  2 
1  Fido  4 
2  Joey  7 
3 Yeller  2 
4  [a]  2 

>>> df[df['dog_name'].isin(['Fido', 'Yeller'])] 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-20-1b68dd948f39> in <module>() 
----> 1 df[df['dog_name'].isin(['Fido', 'Yeller'])] 
... 
pandas/lib.pyx in pandas.lib.ismember (pandas/lib.c:5014)() 

TypeError: unhashable type: 'list' 

爲了找到這些壞狗:

>>> df[[isinstance(dog, list) for dog in df.dog_name]] 
    dog_name count 
4  [a]  2 

若要查找的所有數據類型列:

>>> set((type(dog) for dog in df.dog_name)) 
{list, str} 
+0

嗯,這真的很奇怪。 @Alexander,足夠奇怪'任何((在df.dog_name中爲(isinstance(v,list)for v))''''false' – scrollex

+1

嘗試確保數據是所有字符串:'all((isinstance(dog,str)for dog在df.dog_name))' – Alexander

+0

完美,謝謝! – scrollex

相關問題