1. 程式人生 > >【pandas】[2] DataFrame 基礎,建立DataFrame和增刪改查基本操作(1)

【pandas】[2] DataFrame 基礎,建立DataFrame和增刪改查基本操作(1)

作者:lianghc

地址:http://blog.csdn.net/zutsoft         DataFrame 是pandas最常用的資料結構,類似於資料庫中的表,不過DataFrame不僅僅限制於2維,可以建立多維資料表。DataFrame既有行索引,也有列索引,可以看做是Series組成的字典,每個Series看做DataFrame的一個列。

1.DataFrame建立:

1.標準格式建立 2.等長列表組成的字典來建立 3.巢狀字典(字典的值也是字典)建立

1.1  標準格式建立

 DataFrame建立方法有很多,常用基本格式是:DataFrame 構造器引數:DataFrame(data=[],index=[],coloumns=[])

In [272]: df2=DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four'])

In [273]: df2
Out[273]: 
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11
d   12   13     14    15

1.2 用傳入等長列表組成的字典來建立

In [204]: data={'c':['1','2'],'a':['5']}  #建立不等長字典序列

In [205]: data
Out[205]: {'a': ['5'], 'c': ['1', '2']}

In [206]: df=DataFrame(data)
Traceback (most recent call last):
...

ValueError: arrays must all be same length   # 報錯,傳入的陣列必須等長

In [207]: data={'c':['1','2'],'a':['5','6']}  #建立<strong>等長字典序列
In [208]: df=DataFrame(data)

In [209]: df
Out[209]: 
   a  c                      # 建立完成後'a','c'自動按照字典序排序,並且建立時自定加上索引
0  5  1
1  6  2
建立完成後'a','c'自動按照字典序排序,並且建立時自定加上索引

如果指定了columns名稱,則會按照指定順序建立。

In [210]: df=DataFrame(data,columns=['c','a'])

In [211]: df
Out[211]: 
   c  a    #按照指定順序建立。
0  1  5
1  2  6

1.3 傳入巢狀字典(字典的值也是字典)建立DataFrame

列名:巢狀字典的外層子鍵 索引:內層鍵
In [227]: nest_dict={'shanghai':{2015:100,2016:101},'beijing':{2015:102,2016:103}}

In [228]: nest_dict
Out[228]: {'beijing': {2015: 102, 2016: 103}, 'shanghai': {2015: 100, 2016: 101}}

In [229]: df1=DataFrame(nest_dict)

In [230]: df1
Out[230]: 
      beijing  shanghai
2015      102       100
2016      103       101


2.DataFrame 增刪改查

2.1.增

為不存在的列賦值會建立新列
In [219]: df['b']=1

In [220]: df
Out[220]: 
   c  a  b
0  1  5  1
1  2  6  1

2.2.刪

用del刪除
In [225]: del df['a']

In [226]: df
Out[226]: 
   c  b
0  1  1
1  2  1

用drop() 刪除 用drop刪除時,刪的是檢視,並沒有真正刪除。
<pre name="code" class="python">In [258]: df
Out[258]: 
   c  b  0
0  5  1  6
1  5  1  6
In [259]: df.drop(0,axis=1) #刪除列Out[259]:   
   c  b
0  5  1
1  5  1
In [260]: df  # df的資料並沒有改動
Out[260]:   
   c  b  0
0  5  1  6
1  5  1  6

dorp()可以通過axis(行:axis=0 ,列:axis=1)可以控制刪除行或列,預設是行。

dorp()也可以同時刪除多行或多列

例:

In [271]: df.drop([0,1],axis=1)
Out[271]: 
   c  b
0  6  6
1  5  1

2.3.改

通過賦值進行修改,可以通過定位到行,列,或者具體位置進行賦值修改。 修改具體元素值:
In [242]: df['c'][1]=4

In [243]: df
Out[243]: 
   c  b
0  1  1
1  4  1
修改列:
In [244]: df['c']=5 

In [245]: df
Out[245]: 
   c  b
0  5  1
1  5  1
修改行:
df[:1]=6

df
Out[266]: 
   c  b
0  6  6
1  5  1

修改行和列如果傳入一組值得話,注意傳入陣列的長度,如果傳入陣列長度大於len(df) 則截斷,小於df長度則置NaN
In [267]: df[0]=Series([1,2,3])

In [268]: df
Out[268]: 
   c  b  0
0  6  6  1
1  5  1  2

In [269]: df[1]=Series([1,])  #增加一列,傳入一個值

In [270]: df
Out[270]: 
   c  b  0   1
0  6  6  1   1
1  5  1  2 NaN

2.4.查(索引,選取,過濾)

選取資料 是DataFrame的重點,常用的有 位置切片 和 標籤切片置切片遵循Python的切片規則,包括起始位置,但不包括結束位置;但標籤切片則同時包括起始標籤和結束標籤。之所以如此設計是因為在使用標籤切片時,通常我們不知道標籤的順序,如果不包含結束標籤,很難確定結束標籤的前一個標籤是什麼。

註釋: 標準Python / Numpy表示式可以完成這些資料選擇工作, 但在生產程式碼中, 我們推薦使用優化的pandas資料訪問方法, .at, .iat, .loc, .iloc 和 .ix.
標籤切片和loc選擇器:

建議使用這種列標籤選取方式,用'.'容易出問題。‘.’的寫法容易與其他預留關鍵字產生衝突

In [276]: data['two']  #建議使用這種列標籤選取方式,用'.'容易出問題.。‘.’的寫法容易與其他預留關鍵字產生衝突


‘[ ]’的寫法最安全。
Out[276]: 
a     1
b     5
c     9
d    13
Name: two, dtype: int32

In [277]: data.two
Out[277]: 
a     1
b     5
c     9
d    13
Name: two, dtype: int32
選擇多列:
In [279]: data[['one','two']] #注意多列選擇時,傳入的事陣列, <span style="font-family: Arial, Helvetica, sans-serif;">data[['one','two']] 不能寫成 data['one','two']</span>
Out[279]:
one two
a 0 1
b 4 5
c 8 9
d 12 13

使用loc,選取列:

data.loc[:,'one']
Out[290]: 
a     0
b     4
c     8
d    12
Name: one, dtype: int32

使用loc,選取行:
In [293]: data.loc[:'c',:]
Out[293]: 
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11

使用loc,選取第一個元素:

In [294]: data.loc[:'a',:'one']
Out[294]: 
   one
a    0
位置切片和ix選擇器:
data[0:3]            #等價於data[:3]
Out[285]: 
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11

ix用法和loc差不多,loc傳入的事行列的名稱,ix使用的是相對位置

選取第一行第一列

In [295]: data.ix[:1,:1]
Out[295]: 
   one
a    0
其他pandas資料選擇等問題可參考:






相關推薦

pandas[2] DataFrame 基礎建立DataFrame刪改基本操作1

作者:lianghc 地址:http://blog.csdn.net/zutsoft         DataFrame 是pandas最常用的資料結構,類似於資料庫中的表,不過DataFrame不僅僅限制於2維,可以建立多維資料表。DataFrame既有行索引,也有列

演算法二叉樹的遞迴非遞迴遍歷

原文地址 【寫在前面】   二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序、中序以及後序三種遍歷方法。因為樹的定義本身就 是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且程式碼很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採

學以致用android功能實現5---android8.0 Launcher獲取快捷方式原始碼分析1

從其他應用往桌面建立快捷方式,android8.0統一採用requestPinShortcut的方式。 對於桌面而言,是怎麼從requestPinShortcut獲取快捷方式資訊在桌面建立快捷方式呢? Android8.0的快捷方式引數不再通過廣播傳送,而是存放在系統當中

git入門學習一git安裝刪改基本操作命令

git 工作區 暫存區 版本庫 在當前目錄新建一個Git程式碼庫 git init (會多出.git資料夾) 設計提交程式碼時的使用者資訊 :git config --global  user.name zhangsan    git config --glob

pandas[1] Series 入門(建立刪改)

作者:lianghc 地址:http://blog.csdn.net/zutsoft/article/details/51482573 Series 是pandas兩大資料結構中(DataFrame,Series)的一種。使用pandas 前需要將pandas 模組引入,因

網路TCP三次握手建立連線四次揮手釋放連結

TCP協議 TCP報文格式 TCP建立連線的過程   (1)Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Se

C利用單鏈表資料結構實現通訊錄連結串列的刪改

C語言中實現連結串列,是需要利用到C語言中比較難的結構體與指標才能實現。 結構體中放一個指向後接節點的指標與每一個結點應該存放的資訊。 下面做一個命令列的通訊錄來說明連結串列的增刪改查這個問題。 一開始讓使用者輸入連結串列,按1可以輸出,按3可以刪除。 可以修改: 可以

python下的PandasDataFrame基本操作基本函式整理

pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYSIS】中對pandas的方方面面都有了一個權威簡明的入門級的介紹,但在實際使用過程中,我發現書中的內容還只是冰山一角。談到pandas資料的行更新、表合併等操作,一般用到的

原創這一次Chrome表現IE11一樣令人失望圍觀群眾有:EdgeFirefox

前言 俗話說,常在河邊走哪能不溼鞋,天天和瀏覽器打交道,發現瀏覽器竟然也隱藏BUG也不是新鮮事了。可以看下我之前的文章: 【原創】分享IE7一個神奇的BUG(不是封閉標籤的問題,的確是IE7的BUG) 【原創】Chrome53 最新版驚現無厘頭卡死 BUG! 【原創】Chrome最新版(53-55)再

Android從無到有:手把手一步步教你使用最簡單的Fragment

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80585416 【本文適用讀者】         用程式碼建立並使用了 Fragment,新增 Fragment 之

Android從無到有:手把手一步步教你使用最簡單的Fragment

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80579389 【本文適用讀者】         targetSdkVersion 版本大於等於 21,即 app 即將有可能

Android從無到有:手把手一步步教你使用最簡單的 Fragment

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80515227 【本文適用讀者】         知道 Fragment 是什麼,不知

例項:建立一個表格分頁顯示資料MongoDB資料庫儲存功能:實現刪改

需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta

java DOM 對xml檔案的操作分別對節點、節點屬性、節點內容刪改

最近研究xml檔案  但是書上僅僅是解析 自己有點不滿意 於是在“度娘谷哥”的幫助下蒐集了一些有關於DOM操作xml檔案的資料 並整理下來 也有0分的原始碼供大家下載 DOM是W3C組織推廣的一中操作xml檔案的方法,也是java原生態操作xml檔案的方法之一,DOM的優點

圖文詳解scrapy爬蟲與動態頁面——爬取拉勾網職位資訊1

5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上

學以致用android功能實現7---android8.0 Launcher獲取快捷方式原始碼分析3

獲取完快捷方式的資訊之後,便是如何具體的將快捷方式的名字,圖示和開啟方式放置到桌面上。 最後一步addAndBindAddedWorkspaceItems(                 new LazyShortcutsProvider(context.getAppl

C++函式結構--struct經典程式--傳遞結構返回結構的程式碼示例1

結構和陣列的差異(基本概念)  為結構編寫函式比為陣列編寫函式要簡單得多。 結構是一個實體,被 看做一個整體,可以將一個結構賦給另一個結構。 函式可以返回結構。陣列名就是陣列第一個元素的地址,而結構名只是結構的名稱,要想獲得結構的地址,必須使用地址運算子& 然而,按

Telerik Kendo UI 那點事3GridView MVVM前後臺聯動服務端分頁、分組、過濾查詢、排序

中文化之後,我們開始具體使用kendo ui元件。經常開發系統的我,通常從最常用的控制元件用起,那就是表格控制元件GridView!現在的軟體系統基本上就是標籤框、文字框、選擇框、樹、表格堆砌而成。因此接觸任何一種UI元件的時候,我通常都最為關注GridView,表格控制元

檢視利用USER_TAB_MODIFICATIONS檢視輔助監控表的刪改操作

USER_TAB_MODIFICATIONS檢視記錄了當前使用者中表自最後一次分析之後所有增、刪、改等操作資訊。通過對其查詢可以得到一個簡化版的審計功能效果。因為該檢視中記錄的資訊會因表的分析自動清除,同時Oracle從效能上考慮並沒有保證這個檢視與表的操作實時保持一致,有一定的滯後,因此其中記錄的資訊僅可用

Mysql基礎2:SQL語句基本操作

1. DDL:庫操作、表操作和列操作等(使用的關鍵字:create、alter和drop) 1.1  庫操作 基本語法:create database 資料庫名字 [資料庫選項] 資料庫選項:主要是用來約束資料庫,可分為兩項: 1)字符集的設定:charset或者