pandas速成筆記(2)-excel增刪改查基本操作
阿新 • • 發佈:2022-03-13
接上篇繼續,本篇演示對excel的基本增刪改查操作。
一、讀取excel
假設有以下excel檔案: 002.xlsx
用pandas可以這樣讀取:
import pandas as pd df = pd.read_excel("data/002.xlsx") print(df.shape) print(df.columns) print(df)
顯示如下:
(6, 2) Index(['id', 'name'], dtype='object') id name 0 1 A 1 2 B 2 3 C 3 4 D 4 5 E 5 6 F
解釋:
第1行輸出(6,2),表示這是6行2列
第2行輸出的是列資訊,表示有id, name這2列,都是object型別
第3行輸出的就是表格資料,注意最左沒有列名的這列,從0到5,如果做過資料庫開發的同學,應該都知道:資料表內部通常會有一個唯一鍵,也稱為主鍵索引。pandas讀取的excel,如果沒有指定索引,預設會按數字順序,生成1個預設的索引,即上面的0-5。
如果在讀取時,微調一下,指定索引列:
df = pd.read_excel("data/002.xlsx", index_col="id")
輸出就變成了下面這樣:
(6, 1) Index(['name'], dtype='object') name id 1 A 2 B 3 C 4 D 5 E 6 F
可以看到id變成了現在的索引列,但是要注意一點:pandas裡的索引列,跟資料庫表中的主鍵索引,還是有不同的,它允許重複! 感興趣的同學,可以把這個excel檔案的id列,找2行,改成相同的值,比如下面這樣:
還是剛才的程式碼,輸出如下:
(6, 1) Index(['name'], dtype='object') name id 1 A 2 B 3 C 4 D 5 E 5 F
有時候,可能拿到的excel,沒有title,只有資料,比如這樣:
import pandas as pd df = pd.read_excel("data/002.xlsx") print(df)
這時候,讀出來是這樣:
1 A 0 2 B 1 3 C 2 4 D 3 5 E 4 5 F
第1行資料會誤認為是title,可以加上header=None
import pandas as pd df = pd.read_excel("data/002.xlsx", header=None) print(df)
這樣就正常了:
0 1 0 1 A 1 2 B 2 3 C 3 4 D 4 5 E 5 5 F
再來看一種特殊情況:資料左邊和上邊都有空行
同樣可以加一些引數 skiprows=1 , usecols="C:D"表示跳過1行,列從C至D
import pandas as pd df = pd.read_excel("data/002.xlsx", skiprows=1, usecols="C:D", index_col="ID") print(df)
二、新增/刪除一行(或一列)
還是這個excel檔案:
2.1 新增一行
import pandas as pd df = pd.read_excel("data/002.xlsx", index_col="ID") print(df) print("----------") # 新增一行 df.loc[df.size + 1] = {"ID": 7, "Name": "H"} print(df)
輸出如下:
Name ID 1 A 2 B 3 C 4 D 5 E 6 F ---------- Name ID 1 A 2 B 3 C 4 D 5 E 6 F 7 H
2.2 新增一列
import pandas as pd df = pd.read_excel("data/002.xlsx", index_col="ID") print(df) print("----------") # 新增一列 df['Age'] = range(21, 27) print(df)
輸出:
Name ID 1 A 2 B 3 C 4 D 5 E 6 F ---------- Name Age ID 1 A 21 2 B 22 3 C 23 4 D 24 5 E 25 6 F 26
2.3 刪除一行(或一列)
import pandas as pd df = pd.read_excel("data/002.xlsx", index_col="ID") print(df) print("----------") # 先新增一列 df['Age'] = range(21, 27) print(df) # 再刪除一列 df.drop("Name", axis=1, inplace=True) print("----------") print(df) # 按index值,再刪除3行 df.drop([3, 4, 5], axis=0, inplace=True) print("----------") print(df)
輸出:
Name ID 1 A 2 B 3 C 4 D 5 E 6 F ---------- Name Age ID 1 A 21 2 B 22 3 C 23 4 D 24 5 E 25 6 F 26 ---------- Age ID 1 21 2 22 3 23 4 24 5 25 6 26 ---------- Age ID 1 21 2 22 6 26
三、修改指定單元格
import pandas as pd df = pd.read_excel("data/002.xlsx", index_col="ID") print(df) print("----------") # 修改ID=1這行的Name值 df.loc[1]["Name"] = "test" print(df)
輸出:
Name ID 1 A 2 B 3 C 4 D 5 E 6 F ---------- Name ID 1 test 2 B 3 C 4 D 5 E 6 F
四、遍歷所有單元格
import pandas as pd df = pd.read_excel("data/002.xlsx", index_col="ID") print(df) print("----------") # 遍歷所有單元格 for idx, data in df.iterrows(): print("id:{}\tname:{}".format(idx, data["Name"]))
輸出:
Name ID 1 A 2 B 3 C 4 D 5 E 6 F ---------- id:1 name:A id:2 name:B id:3 name:C id:4 name:D id:5 name:E id:6 name:F
參考連結:
https://pandas.pydata.org/pandas-docs/stable/getting_started/intro_tutorials/index.html