>>> 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表示列...