我們使用pandas常常會涉及到切片操作,特別是一維的series,我常常覺得它和python list無甚區別,所以經常就用list的切片方法去切片series。
然而結果呢?有時候會成功,有時候就會報惱人的keyerror。次數多了之後,我發現這樣乙個問題:
當series或者dataframe的index為int型別時,你對它進行切片,切片的數字或者區段,pandas會自動理解為index,即它會認為你在用index進行切片。此時如果你series的index和正常的從0開始的有序整數不一樣的話,自然會報錯;然而若你的index非int資料型別,比如說是str字串,那麼你採取切片就和list一樣了,即乙個名為「ser」的series,ser[0]就代表著第乙個值,和index無關;此外,如果你使用str型別的index去取,照樣也可以取出。
所以,綜上,當你的series或dataframe的index的資料型別是int型別時,你就無法用list切片的方式進行切片或者取單個數值,此時你只能按照index取;如果你的series或dataframe的index的資料型別不是int型別,那麼你可以用index取,也可以用list切片的方式取
下面上簡單的code:
# index不是int型別時(此時為str型別):
dfdf = pd.series()
dfdf
>>> 1 1
2 2
3 3
4 4
dtype: int64
dfdf[0]
>>> 1
dfdf[-1]
>>> 4
dfdf['1']
>>> 1
# 用list的取數方法或者用str型別的index取都可以
# 當index是int型別時:
# 用astype方法先把index型別轉換一下:
dfdf.index = dfdf.index.astype(int)
dfdf.index
>>> int64index([1, 2, 3, 4], dtype='int64')
dfdf[0]
>>> keyerror: 0 # 此處省略一萬字...
dfdf[-1]
>>> keyerror: -1 # 此處省略一萬字...
dfdf[1]
>>> 1
有時候我們要用pandas庫處理從資料庫中取出來的資料,此時取出來的資料的主鍵往往會被大家設定成dataframe的index。而主鍵往往又都是int型別,所以當你做過drop()/rank()/sort_values()的操作後,原int型別的index必然會亂掉,此時你想取前x條資料,然後又想用df[i]拿到排在第i位的數值的時候,等待你的必然是涼涼。
所以,我們可以在一開始就把index轉換為str型別
pandas中的多級index操作
在pandas中可以為series和dataframe設定多個index,也就是說可以有多級index和column。這樣可以對pandas的操作更加靈活。import numpy as np import pandas as pd from pandas import series,datafra...
pandas系列之index小記
import pandas as pd 資料準備 df pd.dataframe np.arange 20 reshape 5,4 index 1 3,6 9,10 重置索引且保留原始索引 df.reset index 重置索引且不保留原始索引 df.reset index drop true 按照...
pandas根據index操作與重新排列
pandas有三個操作index的方法 dataframe.reindex self,labels none index none columns none axis none method none copy true level none fill value nan,limit none to...