1. 程式人生 > 其它 >pandas速成筆記(2)-excel增刪改查基本操作

pandas速成筆記(2)-excel增刪改查基本操作

上篇繼續,本篇演示對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