pandas模組篇(之三)
阿新 • • 發佈:2020-09-08
今日內容概要
目標:將Pandas儘量結束
- 如何讀取外部excel檔案資料到DataFrame中
- 針對DataFrame的常用資料操作
- 索引與切片
- 操作DataFrame的欄位名稱
- 時間物件序列操作
- 資料分組與聚合
- 練習題
今日內容詳細
如何讀取外部excel檔案資料到DataFrame中
df = pd.read_csv('douban_movie.csv') # 由於當前檔案跟excel檔案在同一個目錄下所以可以直接寫檔名 # 如果不在同一個路徑下 那麼需要輸入excel檔案的絕對路徑 # ''' # 絕對路徑 # 類似於全球具體座標,任何人拿到該座標都可以查詢 # 相對路徑 # 相對於一個參照物,並不是所有人都可以根據該座標找到 # ''' df # 在讀取檔案的時候還可以自定義列 df1 = pd.read_csv('douban_movie.csv',index_col='產地') # df1.set_index('型別') df1 # 都是用來指定讀取出來的excel資料的左側行名稱(行名稱必須是表格中存在的) # 將之前設定的行索引取消 df1.reset_index()
基本操作
# 指定看前面多少條 df.head(5) 名字 投票人數 型別 產地 上映時間 時長 年代 評分 首映地點 0 肖申克的救贖 692795.0 劇情/犯罪 美國 1994-09-10 00:00:00 142.0 1994 9.6 多倫多電影節 1 控方證人 42995.0 劇情/懸疑/犯罪 美國 1957-12-17 00:00:00 116.0 1957 9.5 美國 2 美麗人生 327855.0 劇情/喜劇/愛情 義大利 1997-12-20 00:00:00 116.0 1997 9.5 義大利 3 阿甘正傳 580897.0 劇情/愛情 美國 1994-06-23 00:00:00 142.0 1994 9.4 洛杉磯首映 4 霸王別姬 478523.0 劇情/愛情/同性 中國大陸 1993-01-01 00:00:00 171.0 1993 9.4 香港 # 檢視尾部指定條數的資料 df.tail(5) # 檢視資料條數 len(df) 38735 # 檢視資料的行列個數 df.shape (38735, 9) # 檢視行索引 df.index RangeIndex(start=0, stop=38735, step=1) # 檢視列欄位 df.columns Index(['名字', '投票人數', '型別', '產地', '上映時間', '時長', '年代', '評分', '首映地點'], dtype='object')
資料匯出
# 將DataFrame匯出excel檔案
df.to_csv('db1.csv') # 預設index=True 自動將DataFrame的行索引也匯出
df.to_csv('db2.csv',index=False) # 忽略行索引
索引與切片
DataFrame也是由行索引和列索引,也可以通過標籤和位置兩種方法進行 方式1 兩個中括號,先取列再取行 df['A'][0] 方式2 使用loc/iloc屬性:一箇中括號逗號隔開,先取行再取列 都是左側 df.loc[0:5] 名字 投票人數 型別 產地 上映時間 時長 年代 評分 首映地點 0 肖申克的救贖 692795.0 劇情/犯罪 美國 1994-09-10 00:00:00 142.0 1994 9.6 多倫多電影節 1 控方證人 42995.0 劇情/懸疑/犯罪 美國 1957-12-17 00:00:00 116.0 1957 9.5 美國 2 美麗人生 327855.0 劇情/喜劇/愛情 義大利 1997-12-20 00:00:00 116.0 1997 9.5 義大利 3 阿甘正傳 580897.0 劇情/愛情 美國 1994-06-23 00:00:00 142.0 1994 9.4 洛杉磯首映 4 霸王別姬 66666666.0 劇情/愛情/同性 中國大陸 1993-01-01 00:00:00 171.0 1993 9.4 香港 5 泰坦尼克號 157074.0 劇情/愛情/災難 美國 2012-04-10 00:00:00 194.0 2012 9.4 中國大陸 df.iloc[0:5] 名字 投票人數 型別 產地 上映時間 時長 年代 評分 首映地點 0 肖申克的救贖 692795.0 劇情/犯罪 美國 1994-09-10 00:00:00 142.0 1994 9.6 多倫多電影節 1 控方證人 42995.0 劇情/懸疑/犯罪 美國 1957-12-17 00:00:00 116.0 1957 9.5 美國 2 美麗人生 327855.0 劇情/喜劇/愛情 義大利 1997-12-20 00:00:00 116.0 1997 9.5 義大利 3 阿甘正傳 580897.0 劇情/愛情 美國 1994-06-23 00:00:00 142.0 1994 9.4 洛杉磯首映 4 霸王別姬 66666666.0 劇情/愛情/同性 中國大陸 1993-01-01 00:00:00 171.0 1993 9.4 香港
資料操作
df['名字'] # 展示形式是Series
df[['名字']] # 用中括號擴一下就會變成表格的形式展示
# 一次性獲取多個列
df[['名字','評分','型別']]
# 切片獲取資料條數
df[0:10]
# 獲取指定資料
df.at[4,'名字'] # at['行索引值','列名稱']
# 修改指定資料
df.at[4,'名字'] = '愛情動作科幻大混合'
# 利用關鍵字指定索引
df.loc[1].at['名字']
# 切片之後獲取指定的列資料
df[1:5][['名字','型別','年代']]
# 資料快速篩選
df[(df.評分 > 8.5) & (df.評分 < 9.0)]
資料自定義展示
>>> df = pd.DataFrame({
... 'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
... 'col2': [2, 1, 9, 8, 7, 4],
... 'col3': [0, 1, 9, 4, 2, 3],
... })
>>> df
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
Sort by col1
>>> df.sort_values(by=['col1'])
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
5 C 4 3
4 D 7 2
3 NaN 8 4
Sort by multiple columns
>>> df.sort_values(by=['col1', 'col2'])
col1 col2 col3
1 A 1 1
0 A 2 0
2 B 9 9
5 C 4 3
4 D 7 2
3 NaN 8 4
Sort Descending
>>> df.sort_values(by='col1', ascending=False)
col1 col2 col3
4 D 7 2
5 C 4 3
2 B 9 9
0 A 2 0
1 A 1 1
3 NaN 8 4
Putting NAs first
>>> df.sort_values(by='col1', ascending=False, na_position='first')
col1 col2 col3
3 NaN 8 4
4 D 7 2
5 C 4 3
2 B 9 9
0 A 2 0
1 A 1 1
# 後面還可以對排序之後的結果篩選
df.sort_values(['列名1','列名2'],ascending=True)[['目標列1','目標列2']]
操作列
df.rename(column={'舊列名稱':'新列名稱'},inplace=True)
# 能修改 但是會報個錯誤 可以新增下列配置
pd.set_option('mode.chained_assignment',None)
# 建立新的列
df['新列名稱']=df.列名稱/(df.列名稱1+df.列名稱2)
# 自定義位置
df.insert(3,'新列名稱',新資料)
操作行
# 方式1 append
>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
>>> df
A B
0 1 2
1 3 4
>>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
>>> df.append(df2)
A B
0 1 2
1 3 4
0 5 6
1 7 8
With `ignore_index` set to True:
>>> df.append(df2, ignore_index=True)
A B
0 1 2
1 3 4
2 5 6
3 7 8
# 方式2 concat功能更強大 可以拼接Series和DataFrame
pd.concat([res,df])
pd.concat([res,df],ignore_index=True)
'''
本質其實就相當於拼接表格資料
'''