访问pandas.DataFrame列的不同方法

时间:2016-09-12 16:04:07

标签: python pandas dataframe

df[columns]df.loc[:,columns]之间有什么区别,包括左值和左值?

它们似乎可以与行为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 / wilbur / lib / python2.7 / site-packages / pandas / core / indexing.py:465:SettingWithCopyWarning:   尝试在DataFrame的切片副本上设置值。   尝试使用.loc [row_indexer,col_indexer] = value而不是

1 个答案:

答案 0 :(得分: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