Python資料分析 DataFrame 筆記

银河小船儿發表於2024-04-29

08,DataFrame建立

DataFrame是一個【表格型】的資料結構,可以看做是【由Series組成的字典】(共用同一個索引)。DataFrame由按一定順序排列的多列資料組成。設計初衷是將Series的使用場景從一維擴充到多維。DataFrame既有行索引,也有列索引。

  • 行索引:index
  • 列索引:columns
  • 值:values(Numpy的二維陣列)

(8.1)DataFrame的建立

最常用的方法是傳遞一個字典來建立。DataFrame以字典的鍵作為每一【列】的名稱,以字典的值(一個陣列)作為每一列。此外,DataFrame會自動加上每一行的索引(和Series一樣)。

同Series一樣,若傳入的列與字典的鍵不匹配,則相應的值為NaN。

DataFrame的基本屬性和方法:

  • values 值,二維ndarray陣列
  • columns 列索引
  • index 行索引
  • shape 形狀
  • head() 檢視前幾條資料,預設5條
  • tail() 檢視後幾條資料,預設5條

其他建立DataFrame的方式

09,DataFrame切片

【注意】直接用中括號時:

  • 索引優先對列進行操作
  • 切片優先對行進行操作

總結:

  • 要麼取一行或一列:索引
  • 要麼取連續的多行或多列:切片
  • 要麼取不連續的多行或多列:中括號

010,DataFrame運算

(10.1)DataFrame之間的運算

  • 在運算中自動補齊不同索引的資料
  • 如果索引不對應,則補NaN
  • DataFrame沒有廣播機制

建立DataFrame df1 不同人員的各科目成績,月考一

建立DataFrame df2 不同人員的各科目成績,月考二

DataFrame和標量之間的運算

DataFrame之間的運算

使用.add() 函式,填充資料

(10.2)Series與DataFrame之間的運算

  • 使用Python運算子:以行為單位操作(引數必須是行),對所有行都有效。
  1. 類似於NumPy中二維陣列與一維陣列的運算,但可能出現NaN
  • 使用Pandas操作函式:
  1. axis=0:以列為單位操作(引數必須為列),對所有列都有效。
  2. axis=1:以行為單位操作(引數必須為行),對所有行都有效。

011,建立層次化索引

(11.1)建立多層行索引

(11.1.1)隱式構造

最常見的方法是給DataFrame建構函式的index引數傳遞兩個或更多的陣列

  • Series也可以建立多層索引

(11.1.2)顯示構造pd.MultiIndex

  • 使用陣列

  • 使用tuple

  • 使用product
  • 笛卡爾積

(11.2)多層列索引

除了行索引index,列索引columns也能用同樣的方法建立多層索引

就是把pd.MultIndex. 移到columns那裡去

012,多層索引中Series的索引和切片操作

(12.1)Series的操作

  • 對於Series的操作,直接中括號[] 與使用.loc() 完全一樣

(12.1.1)索引

(12.1.2)切片

013,多層索引中DataFrame的索引和切片操作

(13.1)索引

(13.2)切片

014,索引的堆疊

(14.1)stack():將列索引變成行索引

(14.2)unstack():將行索引變成列索引

(14.3)使用fill_value填充

015,聚合操作

(15.1)DataFrame聚合函式

  • 求和
  • 平均值
  • 最大值
  • 最小值等

(15.2)多層索引聚合操作

016,資料合併concat

為方便講解,我們首先定義一個生成DataFrame的函式:

示例:

使用pd.concat()級聯

pandas使用pd.concat函式,與np.concatenate函式類似

(16.1)簡單級聯

  • 忽略行索引 ignore_index

  • 使用多層索引 keys

(16.2)不匹配級聯

不匹配指的是級聯的維度的索引不一致。例如縱向級聯時列索引不一致,橫向級聯時行索引不一致

  • 外連線:補NaN(預設模式)

  • 內連線:只連線匹配的項

017,資料合併merge合併1

  • 類似於MySQL中表和表直接的合併
  • merge與concat的區別在於,merge需要依據某一共同的行或列來進行合併
  • 使用pd.merge() 合併時,會自動根據兩者相同column名稱的那一列,作為key來進行合併。
  • 每一列元素的順序不要求一致

(17.1)一對一合併

(17.2)多對一合併

(17.3)多對多合併

(17.4)key的規範化

  • 使用on = 顯式指定哪一列為key,當2個DataFrame有多列相同時使用

  • 使用left_on和right_on指定左右兩邊的列作為key,當左右兩邊的key都不相等時使用

  • 當左邊的列和右邊的index相同的時候,使用right_index=True

018,資料合併merge合併2

(18.1)內合併與外合併

  • 內合併:只保留兩者都有的key(預設模式)

  • 外合併 how='outer':補NaN

  • 左合併,右合併:how='left',how='right'

(18.2)列衝突的解決

當列衝突時,即有多個列名稱相同時,需要使用on=來指定哪一個列作為key,配合suffixes指定衝突列名

可以使用suffixes=自己指定字尾

merge合併總結:

  • 合併有三種現象:一對一,多對一,多對多。
  • 合併預設會找相同的列名進行合併,如果有多個列名相同,用on來指定。
  • 如果沒有列名相同,但是資料又相同,可以透過left_on,right_on來分別指定要合併的列。
  • 如果想和index合併,使用left_index,right_index來指定。
  • 如果多個列相同,合併之後可以透過suffixes來區分。
  • 還可以透過how來控制合併的結果,預設是內合併,還有外合併outer,左合併left,右合併right。

019,缺失值處理nan

np.nan是浮點型別,能參與到計算中。但計算的結果總是NaN。

020,缺失值檢測

(20.1)Pandas中None與np.nan都視作np.nan

  • 建立DataFrame

  • 使用DataFrame行索引與列索引修改DataFrame資料

(20.2)pandas中None與np.nan的操作

(20.2.1)判斷函式

  • isnull()
  • notnull()

021,缺失值處理_過濾資料

(21.1)使用bool值過濾資料

(21.2)過濾函式dropna

(21.2.1)可以選擇過濾的是行還是列(預設為行)

ps:這裡資料變了

(21.2.2)也可以選擇過濾的方式 how = 'all'

(21.2.3)inplace=True 修改原資料

022,缺失值處理_填充空值

(22.1)填充函式 fillna() Series/DataFrame

(22.2)可以選擇前向填充還是後向填充

重新建立資料

也可以不用重新建立資料,因為沒有用到 inplace=True

023,重複值處理

(23.1)使用duplicated() 函式檢測重複的行

  • 返回元素為布林型別的Series物件
  • 每個元素對應一行,如果該行不是第一次出現,則元素為True

(23.2)使用drop_duplicates() 函式刪除重複的行

024,替換元素replace

使用replace() 函式,對values進行替換操作

025,資料對映map

map()函式中可以使用lamba函式

026,修改索引名rename

027,重置索引reset_index和設定索引set_index

028,資料處理apply

apply() 函式:既支援 Series,也支援DataFrame

029,資料處理transform

030,異常值檢測和過濾1

(30.1)describe() :檢視每一列的描述性統計量

(30.2)df.std() :可以求得DataFrame物件每一列的標準差

(30.3)df.drop() :刪除特定索引

031, 異常值檢測和過濾2

(31.1)unique() :唯一,去重

(31.2)df.query:按條件查詢

032,異常值檢測和過濾3

(32.1)df.sort_values():根據值排序;df.sort_index():根據索引排序

重新建立資料

035,常用聚合函式(count,max,min,median,sum,mean)

038,資料分組聚合

資料聚合是資料處理的最後一步,通常是要使每一個陣列生成一個單個的數值。

資料分類處理:

  • 分組:先把資料分為幾組
  • 用函式處理:為不同組的資料應用不同的函式以轉換資料
  • 合併:把不同組得到的結果合併起來

資料分類處理的核心:groupby()函式

使用.groups屬性檢視各行的分組情況:

039,CSV資料載入

(39.1)df.to_csv:儲存到csv

(39.2)df.read_csv:載入csv資料

相關文章