這篇文章python中pandas.DataFrame(建立、索引、增添與刪除)的簡單操作方法介紹,其中包括創建、索引、增添與刪除等的相關資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
前言
最近在網路上搜了許多關於pandas.DataFrame
的操作說明,都是一些基礎的操作,但這些操作組合起來還是比較花時間正確操作DataFrame,花了我挺長時間去調整BUG的。我在這裡做一些總結,方便你我他。有興趣的朋友們一起來看看吧。
一、建立DataFrame的簡單操作:
1、根據字典創造:
In [1]: import pandas as pd In [3]: aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]} In [4]: bb=pd.DataFrame(aa) In [5]: bb Out[5]: one three two 0 1 3 2 1 2 4 3 2 3 5 4`
字典中的keys就是DataFrame裡面的columns,但是沒有index的值,所以需要自己設定,不設定預設是從零開始計數。
bb=pd.DataFrame(aa,index=['first','second','third']) bb Out[7]: one three two first 1 3 2 second 2 4 3 third 3 5 4
2、從多維數組建立
import numpy as np In [9]: del aa In [10]: aa=np.array([[1,2,3],[4,5,6],[7,8,9]]) In [11]: aa Out[11]: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) In [12]: bb=pd.DataFrame(aa) In [13]: bb Out[13]: 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
從多維數組建立就需要為DataFrame賦值columns和index,否則就是預設的,很醜的。
bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three']) In [15]: bb Out[15]: one two three 22 1 2 3 33 4 5 6 44 7 8 9
3、用其他的DataFrame建立
bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three']) bb Out[15]: one two three 22 1 2 3 33 4 5 6 44 7 8 9 cc=bb[['one','three']].copy() Cc Out[17]: one three 22 1 3 33 4 6 44 7 9
這裡的拷貝是深拷貝,改變cc中的值並不能改變bb中的值。
cc['three'][22]=5 bb Out[19]: one two three 22 1 2 3 33 4 5 6 44 7 8 9 cc Out[20]: one three 22 1 5 33 4 6 44 7 9
二、DataFrame的索引操作:
#對於一個DataFrame來說,索引是最煩的,最容易出錯的。
1、索引一列或幾列,比較簡單:
bb['one'] Out[21]: 22 1 33 4 44 7 Name: one, dtype: int32
多個列名需要將輸入的列名存在一個列表裡,才是個collerable的變量,否則會報錯。
bb[['one','three']] Out[29]: one three 22 1 3 33 4 6 44 7 9
2、索引一筆記錄或幾筆記錄:
bb[1:3] Out[27]: one two three 33 4 5 6 44 7 8 9 bb[:1] Out[28]: one two three 22 1 2 3
這裡注意冒號是必須有的,否則是索引列的了。
3、索引某幾列的變數的某幾筆記錄,這個折磨了我好久:
第一種
bb.loc[[22,33]][['one','three']] Out[30]: one three 22 1 3 33 4 6
這種不能改變這裡面的值,你只是能讀值,不能寫值,可能和loc()
函數有關:
bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]] In [32]: bb Out[32]: one two three 22 1 2 3 33 4 5 6 44 7 8 9
第二種:也是只能看
bb[['one','three']][:2] Out[33]: one three 22 1 3 33 4 6
想要改變其中的值就會報錯。
In [34]: bb[['one','three']][:2]=[[2,2],[2,2]] -c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead F:\Anaconda\lib\site-packages\pandas\core\frame.py:1999: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame return self._setitem_slice(indexer, value)
第三種:可以改變資料的值! ! !
Iloc是依照資料的行列數來索引,不算index和columns
bb.iloc[2:3,2:3] Out[36]: three 44 9 bb.iloc[1:3,1:3] Out[37]: two three 33 5 6 44 8 9 bb.iloc[0,0] Out[38]: 1
#下面是證明:
bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]] In [45]: bb Out[45]: one two three 22 9 9 3 33 9 9 6 44 9 9 9
三、在原有的DataFrame上新建一個columns或幾個columns
1、什麼都不需要的,只能單獨建立一列,多列並不好使,親測無效:
bb['new']=[2,3,4] bb Out[51]: one two three new 22 9 9 3 2 33 9 9 6 3 44 9 9 9 4 bb[['new','new2']]=[[2,3,4],[5,3,7]] KeyError: "['new' 'new2'] not in index"
賦予的list基本就是按照所給index值順序賦值,可是一般我們是要對應的index進行賦值,想要更高級的賦值就看後面的了。
2、使用字典進行多列按index賦值:
aa={33:[234,44,55],44:[657,77,77],22:[33,55,457]} In [58]: bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys())) In [59]: bb Out[59]: one two three new hi hello ok 22 9 9 3 2 33 55 457 33 9 9 6 3 234 44 55 44 9 9 9 4 657 77 77
這裡aa是一個字典和列表的嵌套,相當於一筆記錄,使用keys當做index名而不是一般預設的columns名。達到了按index多列匹配的目的。由於dict()
儲存是混亂的,之間用dict()
而不給他的index賦值會記錄錯亂,這一點注意值得注意。
四、刪除多列或多記錄:
#刪除列
bb.drop(['new','hi'],axis=1) Out[60]: one two three hello ok 22 9 9 3 55 457 33 9 9 6 44 55 44 9 9 9 77 77
刪除記錄
bb.drop([22,33],axis=0) Out[61]: one two three new hi hello ok 44 9 9 9 4 657 77 77
跟大家分享一篇關於python中pandas.DataFrame對行與列求和及新增行與列範例,有興趣的朋友們可以看看。
DataFrame還有很多功能還沒有涉及,等以後有涉及到,看完官網的API之後,還會繼續分享,everything is ok。
相關文章:
關於python中pandas.DataFrame對行與列求和及新增行與列範例程式碼
詳解python中pandas.DataFrame排除特定行方法範例程式碼
#以上是python中pandas.DataFrame(建立、索引、增加與刪除)的簡單操作方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!