P06 Pandas#

Pandas DataFrame#

  • Pandas模仿Matlab或R的dataframe的函式庫。在資料科學逐漸發展的過程,這些資料大多以類似統計軟體或者Excel等試算表(Sheet)的狀態儲存,也就是二維的表格,且通常是直欄為變數、而橫列為資料列。

  • 把這些資料讀進Python時,固然可以讀成List-of-dictionary或List-of-list的型態,但大部分資料操作的思考邏輯,都是以欄和列為基礎,例如增加一個欄是refactor以後的結果、或者篩選出某些變數符合條件的資料列,或者依據某個欄來重新排列資料列的位置。而Pandas可以說就是被設計來滿足這樣的需求的,

  • 隨著資料科學受世人重視,而發展的越來越完整。例如,Pandas中便有以下函式:

    1. Reading files: pd.read_csv('data.csv')或讀取JSON pd.read_json('data.json')

    2. Filtering data: Slicing data df[0:10]、Selecting data df['col1']、Filtering data df[df['col1'] > 0]

    3. Mutating a new variable(on column), Observing a variable, Changing data type

    4. Arranging (Sorting) data: df.sort_values(by = 'col1')

    5. Summarizing data (group by columns): df.groupby('col1').mean()

    6. NA removal: df.dropna(), Duplicate removal: df.drop_duplicates(inplace = True)

    7. Basic correlation: df.corr()

    8. Pivot table and reshape data: df.pivot_table(index = 'col1', columns = 'col2', values = 'col3')

    9. Joining data: pd.merge(df1, df2, on = 'col1')

    10. Concatenating data: pd.concat([df1, df2])

學習資源:Pandas cheat sheet (from pandas)

1. Dict, List, and Pandas DataFrame#

通常使用Pandas DataFrame是為了處理「表格狀」的資料。因此,不會只像一層的List或Dict,而是會有多層的List或Dict,或是多個List或Dict組成的List或Dict。以下是一個典型List of Dicts轉為DataFrame的例子:

import pandas as pd

list_of_dict = [
    {"姓名":"John","年齡":"25","城市":"紐約"},
    {"姓名":"Andy","年齡":"22","城市":"東京"},
    {"姓名":"Zoey","年齡":"28","城市":"台北"},
]

df = pd.DataFrame(list_of_dict)
df
姓名 年齡 城市
0 John 25 紐約
1 Andy 22 東京
2 Zoey 28 台北

2. Read/Write by Pandas#

這門課,尤其是資料科學,會傾向於用Pandas DataFrame來操作資料,對於初期的觀察資料,或者資料的排序、彙整、計數、篩選、儲存與檔案轉換等,都非常方便。你會用到Pandas Dataframe來操作資料可能會有以下幾種情形:

  1. 將CSV或EXCEL檔案讀入成為Pandas DataFrame(常用)

  2. 將JSON檔案讀入成為Pandas DataFrame(常用)

  3. 將Pandas DataFrame寫入成為CSV或EXCEL檔案(常用)

  4. 將Pandas DataFrame寫入成為JSON檔案(常用)

  5. 將List of Dicts轉為Pandas DataFrame(常用)

  6. 將List of Lists轉為Pandas DataFrame

  7. 將Pandas DataFrame轉為List of Dicts

  8. 將Pandas DataFrame轉為List of Lists

Alt text

Convert list of dicts to DataFrame#

import pandas as pd

list_of_dict = [
    {"姓名":"John","年齡":"25","城市":"紐約"},
    {"姓名":"Andy","年齡":"22","城市":"東京"},
    {"姓名":"Zoey","年齡":"28","城市":"台北"},
]

df = pd.DataFrame(list_of_dict)
df
姓名 年齡 城市
0 John 25 紐約
1 Andy 22 東京
2 Zoey 28 台北

Write DataFrame to CSV file#


df.to_csv('data1.csv', index=False)

Read CSV file to DataFrame#


df = pd.read_csv('data1.csv')

Write DataFrame to JSON file#


df.to_json('data1.json', orient='records')

Read JSON file to DataFrame#


df = pd.read_json('data1.json', orient='records')