pandas的iloc的神奇之處

2021-07-13 02:49:40 字數 1761 閱讀 8940

>>> df=pd.dataframe()

>>> df

a b01

5126

2373

48

我想把所有a列中值大於2的行的b列的值+1,也就是變成這樣:

a  b01

5126

2383

49

如果我們直接用如下**操作:

df[df.a>2].b+=1
結果並不會報錯,但是df的結果是沒有發生任何變化的,因為這裡實際上是對df[df.a>2]這個新的dataframe進行操作,而不是對df,這就是pandas沒有r用得舒服的地方,所以我們得換個法子——也就是iloc:

>>> df.iloc[df[df.a>2].index,1]+=1

>>> df

a b01

5126

2383

49

iloc是直接對df依據位置進行操作,不信試試看

但是,對於iloc,根據官方文件(

allowed inputs are:

>>> list(df.a>2)

[false, false, true, true]

>>> df.iloc[list(df.a>2),1]27

38name: b, dtype: int64

>>> df.iloc[df[df.a>2].index,1]27

38name: b, dtype: int64

可以看到使用boolean array與使用array of integers返回的結果是一樣的,但是如果使用:

>>> df.iloc[list(df.a>2),1]+=1
會報錯:

traceback (most recent call last):

file "", line

1, in

file "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line

98, in __setitem__

self._setitem_with_indexer(indexer, value)

file "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line

422, in

_setitem_with_indexer

self.obj._data = self.obj._data.setitem(indexer, value)

file "/usr/lib/python3/dist-packages/pandas/core/internals.py", line

2396, in setitem

file "/usr/lib/python3/dist-packages/pandas/core/internals.py", line

file "/usr/lib/python3/dist-packages/pandas/core/internals.py", line

641, in setitem

values[indexer] = value

valueerror: array is not broadcastable to correct shape

pandas之ix loc 和 iloc的區別

在python中處理日常資料時,經常會需要索引某些行,現結合本人使用經驗做乙個小的總結,pandas中主要有以下函式 1 loc 2 iloc 3 ix 首先來談談loc 其是通過行標籤索引行資料 import pandas as pd df pd.dataframe columns team a ...

pandas的索引問題(iloc和loc)

loc指的是定位索引,英文意思是loction iloc指的是數字定位索引,int location表示這個只能通過整數索引來取出元素 取出指定的某幾行,或某幾列 這個方法是在需要取出特定的行或者列的時候用,行或者列可以不填,預設選擇是全部行或者全部列 區域選擇 這個方法是比較常用的選擇子區域的方法...

Pandas中loc和iloc函式的用法

loc表示location的意思 iloc中的loc意思相同,前面的i表示integer,所以它只接受整數作為引數。import pandas as pd import numpy as np np.random.randn 5,2 表示返回5x2的矩陣,index表示行的編號,columns表示列...