P06 Pandas#
Pandas cheat sheet: https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf
Pandas DataFrame#
Pandas模仿Matlab或R的dataframe的函式庫。在資料科學逐漸發展的過程,這些資料大多以類似統計軟體或者Excel等試算表(Sheet)的狀態儲存,也就是二維的表格,且通常是直欄為變數、而橫列為資料列。
把這些資料讀進Python時,固然可以讀成List-of-dictionary或List-of-list的型態,但大部分資料操作的思考邏輯,都是以欄和列為基礎,例如增加一個欄是refactor以後的結果、或者篩選出某些變數符合條件的資料列,或者依據某個欄來重新排列資料列的位置。而Pandas可以說就是被設計來滿足這樣的需求的,
隨著資料科學受世人重視,而發展的越來越完整。例如,Pandas中便有以下函式:
Reading files:
pd.read_csv('data.csv')
或讀取JSONpd.read_json('data.json')
Filtering data: Slicing data
df[0:10]
、Selecting datadf['col1']
、Filtering datadf[df['col1'] > 0]
Mutating a new variable(on column), Observing a variable, Changing data type
Arranging (Sorting) data:
df.sort_values(by = 'col1')
Summarizing data (group by columns):
df.groupby('col1').mean()
NA removal:
df.dropna()
, Duplicate removal:df.drop_duplicates(inplace = True)
Basic correlation:
df.corr()
Pivot table and reshape data:
df.pivot_table(index = 'col1', columns = 'col2', values = 'col3')
Joining data:
pd.merge(df1, df2, on = 'col1')
Concatenating data:
pd.concat([df1, df2])
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來操作資料可能會有以下幾種情形:
將CSV或EXCEL檔案讀入成為Pandas DataFrame(常用)
將JSON檔案讀入成為Pandas DataFrame(常用)
將Pandas DataFrame寫入成為CSV或EXCEL檔案(常用)
將Pandas DataFrame寫入成為JSON檔案(常用)
將List of Dicts轉為Pandas DataFrame(常用)
將List of Lists轉為Pandas DataFrame
將Pandas DataFrame轉為List of Dicts
將Pandas DataFrame轉為List of Lists
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')