pandas基本使用(一)-- 利用python進行資料分析筆記(第五章)

柏林牆發表於2020-10-02
import pandas as pd
from pandas import Series, DataFrame

Series

1. 建立Series

  1. 直接將列表建立為Series型別obj = pd.Series([4, 7, -5, 3]),此時索引為預設0~n
  2. 將索引替換為自定義值 obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
  3. 對字典直接轉化Series: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
    obj3 = pd.Series(sdata)
  4. 字典轉化但是根據索引順序對應傳值 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} ,states = ['California', 'Ohio', 'Oregon', 'Texas'] 提前根據索引定好順序
    obj4 = pd.Series(sdata, index=states)

2. 檢視Series

  • obj.index 檢視索引
  • obj.index.name 索引列的名稱
  • obj.name 表的名稱
  • obj.value 檢視值
  • obj[1]根據下標檢視值
  • obj['a'] 根據索引檢視值
  • obj[2:4] 切片顯示
  • obj[ [1,3] ] 根據下標顯示多個值
  • obj[ [ 'a', 'b', 'c' ] ] 同時查多個值,用雙[ [ ] ]
  • obj[ 'a':'c' ] 索引切片顯示多個
  • obj[ obj < 2 ] 條件布林顯示多個值

3. 布林運算判斷

d    4
b    7
a   -5
c    3
dtype: int64
  • print(obj2 > 0) 所有數判斷TrueFalse
  • obj2[obj2 > 0] 根據判斷選出True的行
  • 6 in obj2 錯誤表述: 判斷索引是否在,不能直接判斷值
  • 'e' in obj2 判斷'e'索引是否存在
  • obj4.isnull() 判斷哪些為空
  • obj4.notnull() 判斷非空

4. 算數運算

  • obj1 + obj2 索引相同的對應相加,不同的不相加賦值為NaN,相對應但是有一方為NaN則結果為NaN
  • obj2 * 2 全部乘2
  • np.exp(obj2) 全部e的n次方

5. 修改

  • new_obj = obj.drop('c'),刪除多行:obj.drop(['b', 'c']) drop()的刪除某行時臨時的,需要一個變數儲存結果
  • 重新根據 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']),可以新新增行序列,預設為空NaN
  • 自動填充–複製上一個值 obj3.reindex(range(6), method='ffill')
  • 根據索引大小排序 obj.sort_index()
  • 按照值排序obj.sort_values() 預設空值排到末尾
  • 計算出當前值所排的名次:obj.rank(method='first')

DataFrame

1. 建立

  1. 將等長的列表(非等長會報錯)組成的字典轉化為DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
  1. columns 定長列表組成字典根據列索引順序排序 轉化為DataFrame
    pd.DataFrame(data, columns=['year', 'state', 'pop'])
  2. index 設定 行索引 的名稱,如果 列索引 對應資料找不到則為空
    frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four','five', 'six'])

2. 檢視顯示

  • frame.head() 預設顯示前5項

  • frame.columns 獲取列索引

  • frame['state'] 根據列索引檢視,可以賦值修改

  • frame[ ['a', 'b'] ]同時顯示多列

  • frame[:2] 切片顯示多行

  • frame[ frame['three'] > 5 ] 條件布林檢視

  • frame.loc[ 'three' ] 按 行索引值 檢視

  • frame.loc['Colorado', ['two', 'three']] 先行後列

  • frame.iloc[ 2 ] 單行

  • frame.iloc[ [1,2], [3, 0, 1] ] 下標檢視,先行後列

  • frame.state 根據列索引檢視,但是修改值和刪除不能用

  • frame.index.name 行向量名稱,可以修改起別名

  • frame.columns.name 列向量名稱,可以修改起別名

  • frame.values 檢視整個表資料,以array格式顯示,不會以表格形式表示

  • frame.index 顯示行標籤,index = frame.index, index[1:] 檢視標籤物件

  • 'a' in frame.columns判斷列物件是否存在'a'

  • 2003 in frame.index 判斷某索引是否存在

3. 修改

  • frame['state'] = np.arange(6)range(6) 對某列按順序依次賦值,需要長度完全一致
  • frame['state'] = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five']) 通過Series賦值,需要完全匹配行索引,且必須有行索引,長度可以不一致,空位設空
  • del frame['state'] 刪除某列
  • 臨時刪除需要變數儲存結果frame.drop('a')刪除單行, frame.drop(['a', 'b']) 刪除多行
  • frame.drop('two', axis=1) 列刪除,設定axis=1axis=columns
  • 徹底刪除跟del一樣frame.drop('c', inplace=True)
  • frame.T 轉置
  • 根據索引大小排序:frame.sort_index()預設按行索引排序,frame.sort_index(axis=1, ascending=False)按列索引排序,降序
  • 按照值排序:frame.sort_values(by='b') 指定列號進行 行排序
  • 計算出當前值所排的名次:frame.rank(method='first', ascending=False, axis='columns') 預設為某列的行排序,axis='columns’則為某行的 列排序

3.1 reindex修改,不對原資料造成修改,臨時的顯示需要賦值另一變數儲存

  • 重新根據 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']),可以新新增行序列,預設為空NaN
  • 自動填充–複製上一個值 obj3.reindex(range(6), method='ffill')
  • 通過columns重新排列 列序列 states = ['Texas', 'Utah', 'California'], frame.reindex(columns=states)
  • df1.reindex(columns=df2.columns, fill_value=0) 將所有空值賦值為0

4. 運算

  • df1 + df2擴散運算,全部對應相加
  • df1.add(df2, fill_value=0) 在相加之前,將所以NaN賦值為0,然後再相加
  • 1/df1 == df1.rdiv(1) 對應相除
  • arr - arr[0]其中arr為3*4,此時擴散每行都減去arr[0]
  • arr.sub(arr[0], axis='index')此時為對每列都減去arr[0]
  • 函式運用np.abs(frame)
  • 自定義函式應用f = lambda x: x.max() - x.min(), frame.apply(f)frame作為引數x傳入返回frame
  • ```def f(x): return pd.Series([x.min(), x.max()], index=[‘min’, ‘max’])frame.apply(f)` 返回的可以是一個列表而不僅僅是一個數

相關文章