2016-09-12 3 views
1

В чем разница между df[columns] и df.loc[:,columns], как как lvalue, так и rvalue?различные способы доступа к столбцам pandas.DataFrame

Они кажутся взаимозаменяемыми с поведенческой POV:

>>> df = pd.DataFrame({'x':[1,2,3],'y':['a','b','c']}) 
>>> df[['x']].equals(df.loc[:,['x']]) 
True 
>>> df.loc[:,'z'] = df.x.apply(str) + df.y 
>>> df['a'] = df.x.apply(str) + df.y 
>>> df 
    x y z a 
0 1 a 1a 1a 
1 2 b 2b 2b 
2 3 c 3c 3c 

Я знаю, что есть документ, где-то ответить на это в мучительных деталях (и я уверен, что я даже видел его один раз, но ссылка будет хорошо), но я смотрю «резюме», так сказать.

В частности: является одним ярлыком для другого или существует какая-то смысловая разница?

PS. Это вызвано сообщением

~/.virtualenvs/Уилбур/Библиотека/python2.7/сайт-пакеты/панд/ядро ​​/ indexing.py: 465: SettingWithCopyWarning: Значение пытается установить на копию фрагмента из DataFrame. Попробуйте использовать .loc [row_indexer, col_indexer] = значение вместо

+0

Я не понимаю ваш вопрос. вы хотите знать, что происходит здесь под капотом? –

+2

yes - как, который должен быть быстрее/дешевле/безопаснее и c – sds

+0

Я думаю, что фильтрация 'ix' выполняется быстрее, но требуется больше тестирования, если вам нужно быть на 100% уверенным –

ответ

0

что о синхронизации сравнения в течение 300K строк DF?

In [22]: big = pd.concat([df] * 10**5, ignore_index=True) 

In [23]: %timeit -n 1 -r 1 big['n1'] = big.x.apply(str) + big.y 
1 loop, best of 1: 266 ms per loop 

In [24]: %timeit -n1 -r 1 big.ix[:, 'n2'] = big.x.apply(str) + big.y 
1 loop, best of 1: 317 ms per loop 

In [25]: %timeit -n 1 -r 1 big.loc[:, 'n3'] = big.x.apply(str) + big.y 
1 loop, best of 1: 333 ms per loop 

In [26]: %timeit -n 1 -r 1 big.insert(len(big.columns), 'n4', big.x.apply(str) + big.y) 
1 loop, best of 1: 266 ms per loop 

In [27]: big.shape 
Out[27]: (300000, 6) 

In [28]: big.head() 
Out[28]: 
    x y n1 n2 n3 n4 
0 1 a 1a 1a 1a 1a 
1 2 b 2b 2b 2b 2b 
2 3 c 3c 3c 3c 3c 
3 1 a 1a 1a 1a 1a 
4 2 b 2b 2b 2b 2b 
Смежные вопросы