2014-09-01 2 views
4

У меня есть DataFrame в панд с одним из типов столбцов, являющихся список на междунар, например, так:Сравнить списки панд DataFrame

df = pandas.DataFrame([[1,2,3,[4,5]],[6,7,8,[9,10]]], columns=['a','b','c','d']) 
>>> df 
    a b c  d 
0 1 2 3 [4, 5] 
1 6 7 8 [9, 10] 

Я хотел бы построить фильтр, используя д, но нормальный операции сравнения, кажется, не работает:

>>> df['d'] == [4,5] 
0 False 
1 False 
Name: d, dtype: bool 

Однако, когда я инспектировать построчно, я получаю то, что я ожидал бы

>>> df.loc[0,'d'] == [4,5] 
True 

Что здесь происходит? Как я могу выполнять сравнения списков?

+1

Ваше первое сравнение не будет работать, нет никакого преобразования из серии в список для сравнения. Второй работает, потому что возвращается содержимое элемента, которое является списком, поэтому можно сделать сравнение. Не могли бы вы объяснить, что вы пытаетесь достичь? – EdChum

+0

@EdChum 'd ['d']' возвращает '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '} Я ожидал бы, что возвращаемая серия будет '[True, False]', поскольку первая строка в столбце 'd' имеет тот же список, тогда как второй - нет. Вместо этого я получаю '[false, false]', что для меня не имеет смысла. – Mike

+0

Это может быть ошибка, неуверенная в этом, наличие объекта списка может сбить с толку, возможно, потому что списки не могут быть хэшированы. Если вы вместо этого сохранили dict, то сравнение работает: 'df = pd.DataFrame ([[1,2,3, {'a': [4,5]}], [6,7,8, {'a' : [9,10]}]], columns = ['a', 'b', 'c', 'd']) df.d == {'a': [4,5]} 'Я не предполагая, что это решение – EdChum

ответ

2

Это любопытный вопрос, он, вероятно, связано с тем, что список не hashable Я бы для применять:

df['d'].apply(lambda x: x == [4,5]) 

Конечно, как было предложено DSM, следующие работы:

df = pd.DataFrame([[1,2,3,(4,5)],[6,7,8,(9,10)]], columns=['a','b','c','d']) 
df['d'] == (4,5) 
Смежные вопросы