pandas基础(part2)--DataFrame
學習筆記,這個筆記以例子為主。
開發工具:Spyder
文章目錄
- 數據框DateFrame
- 數據結構操作(舉例)
- 列訪問
- 列添加
- 列刪除
- 行訪問
- 行添加
- 行刪除
- 修改DataFrame中的數據
- DataFrame常用屬性
數據框DateFrame
DataFrame是一個類似于表格的數據類型,可以理解為一個二維數組,索引有兩個維度,可更改。
- DataFrame的特點
①列可以是不同的類型
②大小可變
③標記軸(行和列)
④可以對行和列執行算術運算
- 語法
- 例子1(列表構造方式)
代碼1:
import numpy as np import pandas as pd#從列表創建DataFrame data = [['Ada', 9], ['Black', 12], ['Jack', 15]] df = pd.DataFrame(data) print(df)結果1:
0 1 0 Ada 9 1 Black 12 2 Jack 15代碼2(設置列名):
data = [['Ada', 9], ['Black', 12], ['Jack', 15]] df = pd.DataFrame(data, columns = ['name', 'age']) print(df) print('-'*10) print(df.dtypes)結果2:
name age 0 Ada 9 1 Black 12 2 Jack 15 ---------- name object age int64 dtype: object代碼3(設置數據類型):
data = [['Ada', 9], ['Black', 12], ['Jack', 15]] df = pd.DataFrame(data, columns = ['name', 'age'],dtype = float) print(df) print('-'*10) print(df.dtypes)結果3:
name age 0 Ada 9.0 1 Black 12.0 2 Jack 15.0 ---------- name object age float64 dtype: object- 例子2(字典構造方式)
代碼1:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15]}df = pd.DataFrame(data) print(df)結果1:
age name 0 9 Ada 1 19 Tom 2 12 Black 3 15 Jack備注:字典無序,所以構成dataframe類型時,列會自動的按照列名的首字母排序
代碼2(設置行名):
df = pd.DataFrame(data, index = ['A', 'B', 'C', 'D']) print(df)結果2:
age name A 9 Ada B 19 Tom C 12 Black D 15 Jack代碼3:
df = pd.DataFrame(data, index = pd.date_range('2020-01-01', periods = 4)) print(df)結果3:
age name 2020-01-01 9 Ada 2020-01-02 19 Tom 2020-01-03 12 Black 2020-01-04 15 Jack- 例子3(字典的其他構造方式)
代碼1:
import pandas as pddata = [{'A':1, 'B':2}, {'A':3, 'B':4, 'C':5}] df = pd.DataFrame(data) print(df)結果1:
A B C 0 1 2 NaN 1 3 4 5.0代碼2:
import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four'])} df = pd.DataFrame(data) print(df)結果2:
A B four NaN 4 one 1.0 1 three 3.0 3 two 2.0 2數據結構操作(舉例)
列訪問
DataFrame的單列數據為一個Series。根據DataFrame的定義可以知曉DataFrame是一個帶有標簽的二維數組,每個標簽相當每一列的列名。
- 例子
①訪問單列
代碼:
import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four']),'C':pd.Series([6, 7, 8, 9], index = ['one', 'two', 'three', 'four'])} df = pd.DataFrame(data) #print('-'*10) print(df['A'], '\n',type(df['A']))結果:
four NaN one 1.0 three 3.0 two 2.0 Name: A, dtype: float64 <class 'pandas.core.series.Series'>②訪問多列
代碼:
import pandas as pddata = {'A':pd.Series([1, 2, 3], index = ['one', 'two', 'three']),'B':pd.Series([1, 2, 3, 4], index = ['one', 'two', 'three', 'four']),'C':pd.Series([6, 7, 8, 9], index = ['one', 'two', 'three', 'four'])} df = pd.DataFrame(data)print(df[['C', 'B']])結果:
C B four 9 4 one 6 1 three 8 3 two 7 2列添加
DataFrame添加一列的方法非常簡單,只需要新建一個列索引。并對該索引下的數據進行賦值操作即可。
- 例子
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4']) df['weight'] = pd.Series([8, 4, 5, 6], index = ['a1', 'a2', 'a3', 'a4'])print(df)結果:
age name weight a1 9 Ada 8 a2 19 Tom 4 a3 12 Black 5 a4 15 Jack 6列刪除
刪除某列數據需要用到pandas提供的方法pop()。
- 例子
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df) print('-'*20)#del 方法,刪除一列 del(df['weight']) print(df) print('-'*20)#pop方法,刪除一列 df.pop('hight') print(df)結果:
age hight name weight a1 9 20 Ada 8 a2 19 35 Tom 4 a3 12 30 Black 5 a4 15 33 Jack 6 --------------------age hight name a1 9 20 Ada a2 19 35 Tom a3 12 30 Black a4 15 33 Jack --------------------age name a1 9 Ada a2 19 Tom a3 12 Black a4 15 Jack行訪問
- 例子1(切片:)
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df) print('-'*20) print(df[1:3])結果:
age hight name weight a1 9 20 Ada 8 a2 19 35 Tom 4 a3 12 30 Black 5 a4 15 33 Jack 6 --------------------age hight name weight a2 19 35 Tom 4 a3 12 30 Black 5- 例子2(loc方法)
loc方法是針對DataFrame索引名稱的切片方法,在下面的例子中,我們演示一下loc方法的使用。
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df) print('-'*20) print(df.loc['a2'], '\n',type(df.loc['a2'])) print('-'*20) print(df.loc[['a1', 'a3']])結果:
age hight name weight a1 9 20 Ada 8 a2 19 35 Tom 4 a3 12 30 Black 5 a4 15 33 Jack 6 -------------------- age 19 hight 35 name Tom weight 4 Name: a2, dtype: object <class 'pandas.core.series.Series'> --------------------age hight name weight a1 9 20 Ada 8 a3 12 30 Black 5備注:只獲取一行,則拿到的是Series。
- 例子3(iloc方法)
iloc方法和loc區別是iloc接受的必須是行索引和列索引的下標,在下面的例子中,我們演示一下loc方法的使用。
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df.iloc[2]) print('-'*20) print(df.iloc[[1, 3]])結果:
age 12 hight 30 name Black weight 5 Name: a3, dtype: object --------------------age hight name weight a2 19 35 Tom 4 a4 15 33 Jack 6行添加
- 例子
代碼:
import pandas as pddf1 = pd.DataFrame([['Huang', 7], ['Bai', 8]],columns = ['name', 'age'])df2 = pd.DataFrame([['Bunny', 5], ['Tim', 9]],columns = ['name', 'age'])print(df1) print('-'*15) df = df1.append(df2) print(df) print('-'*15) print(df.loc[0])結果:
name age 0 Huang 7 1 Bai 8 ---------------name age 0 Huang 7 1 Bai 8 0 Bunny 5 1 Tim 9 ---------------name age 0 Huang 7 0 Bunny 5由結果可知,進行行添加后,行標會出現重復的狀況,如果按照行標進行行查詢,則可能會找到多行數據。我們可以重建索引,解決索引重復問題。
行刪除
使用索引標簽從DataFrame中刪除或者刪除行。如果標簽重復,則會刪除多行。
- 例子
代碼:
import pandas as pddf1 = pd.DataFrame([['Huang', 7], ['Bai', 8]],columns = ['name', 'age'])df2 = pd.DataFrame([['Bunny', 5], ['Tim', 9]],columns = ['name', 'age'])df = df1.append(df2) print(df) print('-'*15) #刪除index為1的行 df = df.drop(1) print(df)結果:
name age 0 Huang 7 1 Bai 8 0 Bunny 5 1 Tim 9 ---------------name age 0 Huang 7 0 Bunny 5修改DataFrame中的數據
更改DataFrame中的數據,原理是將要修改的這部分數據提取出來,重新賦值為新的數據.
- 例子
代碼:
import pandas as pddf = pd.DataFrame([['Huang', 7], ['Bai', 8],['Black', 9]],columns = ['name', 'age'])print(df) print('-'*15)df['name'][2] = 'Tim' print(df)備注:df["Name"][2]是先拿到name列(Series類型),再拿到第3行。
結果:
name age 0 Huang 7 1 Bai 8 2 Black 9 ---------------name age 0 Huang 7 1 Bai 8 2 Tim 9DataFrame常用屬性
| 1 | axes | 返回 行/列 標簽(index)列表。 |
| 2 | dtype | 返回對象的數據類型(dtype)。 |
| 3 | empty | 如果Series為空,則返回True。 |
| 4 | ndim | 返回底層數據的維數,默認定義:1。 |
| 5 | size | 返回基礎數據中的元素數。 |
| 6 | values | 將系列作為ndarray返回。 |
| 7 | head() | 返回前n行。 |
| 8 | tail() | 返回最后n行。 |
- 例子
代碼:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack'],'age':[9, 19, 12, 15],'weight':[8, 4, 5, 6],'hight':[20, 35, 30, 33]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4'])print(df, '\n') print(df.axes, '\n') print(df['age'].dtype, '\n') print(df.empty, '\n') print(df.ndim, '\n') print(df.size, '\n') print(df.values, '\n') print(df.head(3), '\n') # df的前三行 print(df.tail(3), '\n') # df的后三行結果:
age hight name weight a1 9 20 Ada 8 a2 19 35 Tom 4 a3 12 30 Black 5 a4 15 33 Jack 6 [Index(['a1', 'a2', 'a3', 'a4'], dtype='object'), Index(['age', 'hight', 'name', 'weight'], dtype='object')] int64 False 2 16 [[9 20 'Ada' 8][19 35 'Tom' 4][12 30 'Black' 5][15 33 'Jack' 6]] age hight name weight a1 9 20 Ada 8 a2 19 35 Tom 4 a3 12 30 Black 5 age hight name weight a2 19 35 Tom 4 a3 12 30 Black 5 a4 15 33 Jack 6- 例子2(describe)
代碼1:
import pandas as pddata = {'name':['Ada', 'Tom','Black', 'Jack', 'Bai'],'age':[9, 19, 12, 15, 10],'weight':[8, 4, 5, 6, 7],'hight':[20, 35, 30, 33, 28]}df = pd.DataFrame(data, index = ['a1', 'a2', 'a3', 'a4', 'a5'])print(df.describe())結果1:
age hight weight count 5.000000 5.00000 5.000000 mean 13.000000 29.20000 6.000000 std 4.062019 5.80517 1.581139 min 9.000000 20.00000 4.000000 25% 10.000000 28.00000 5.000000 50% 12.000000 30.00000 6.000000 75% 15.000000 33.00000 7.000000 max 19.000000 35.00000 8.000000由結果可知,df.describe()將數值型數據的統計量計算出來了。
代碼2:
print(df.describe(include = ['object']))結果2:
name count 5 unique 5 top Jack freq 1由結果可知,df.describe(include = [“object”])是對分類型(這里不是很確定,標記一下) 的數據進行描述性統計分析。
代碼3:
print(df.describe(include = ['number']))結果3:
age hight weight count 5.000000 5.00000 5.000000 mean 13.000000 29.20000 6.000000 std 4.062019 5.80517 1.581139 min 9.000000 20.00000 4.000000 25% 10.000000 28.00000 5.000000 50% 12.000000 30.00000 6.000000 75% 15.000000 33.00000 7.000000 max 19.000000 35.00000 8.000000由結果可知df.describe(include = [“number”])是對數值型的數據進行描述性統計分析,上述結果與結果1相同。
代碼4:
print(df.describe(include = ['number', 'object']))結果4:
age hight name weight count 5.000000 5.00000 5 5.000000 unique NaN NaN 5 NaN top NaN NaN Bai NaN freq NaN NaN 1 NaN mean 13.000000 29.20000 NaN 6.000000 std 4.062019 5.80517 NaN 1.581139 min 9.000000 20.00000 NaN 4.000000 25% 10.000000 28.00000 NaN 5.000000 50% 12.000000 30.00000 NaN 6.000000 75% 15.000000 33.00000 NaN 7.000000 max 19.000000 35.00000 NaN 8.000000結果4基本上可以說,是結果2和結果3的堆疊。
總結
以上是生活随笔為你收集整理的pandas基础(part2)--DataFrame的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投资风口是什么意思
- 下一篇: pandas基础(part3)--描述性