Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?
Kandungan asal adalah seperti berikut:
a) Baca yang ke- Helaian (sub-jadual, anda boleh melihat atau menambah atau memadam sub-jadual di sebelah kiri bawah) data
import pandas as pd # 每次都需要修改的路径 path = "test.xlsx" # sheet_name默认为0,即读取第一个sheet的数据 sheet = pd.read_excel(path, sheet_name=0) print(sheet) """ Unnamed: 0 name1 name2 name3 0 row1 1 2.0 3 1 row2 4 NaN 6 2 row3 7 8.0 9 """
Anda dapat melihat bahawa tiada kandungan di sudut kiri atas borang asal, dan hasil baca ialah "Tanpa Nama : 0", ini kerana fungsi read_excel akan menjadi lalai baris pertama jadual sebagai nama indeks lajur . Selain itu, untuk nama indeks baris, penomboran bermula dari baris kedua secara lalai (kerana baris pertama lalai ialah nama indeks lajur, jadi baris pertama lalai bukan data Jika tidak dinyatakan secara khusus, penomboran bermula dari 0 secara automatik, sebagai mengikuti.
sheet = pd.read_excel(path) # 查看列索引名,返回列表形式 print(sheet.columns.values) # 查看行索引名,默认从第二行开始编号,如果不特意指定,则自动从0开始编号,返回列表形式 print(sheet.index.values) """ ['Unnamed: 0' 'name1' 'name2' 'name3'] [0 1 2] """
b) Nama indeks lajur juga boleh disesuaikan, seperti berikut:
sheet = pd.read_excel(path, names=['col1', 'col2', 'col3', 'col4']) print(sheet) # 查看列索引名,返回列表形式 print(sheet.columns.values) """ col1 col2 col3 col4 0 row1 1 2.0 3 1 row2 4 NaN 6 2 row3 7 8.0 9 ['col1' 'col2' 'col3' 'col4'] """
c) Lajur ke-n juga boleh ditentukan sebagai indeks baris namakan , seperti berikut:
# 指定第一列为行索引 sheet = pd.read_excel(path, index_col=0) print(sheet) """ name1 name2 name3 row1 1 2.0 3 row2 4 NaN 6 row3 7 8.0 9 """
d) Langkau baris ke-n data semasa membaca
# 跳过第2行的数据(第一行索引为0) sheet = pd.read_excel(path, skiprows=[1]) print(sheet) """ Unnamed: 0 name1 name2 name3 0 row2 4 NaN 6 1 row3 7 8.0 9 """
path = "test.xlsx" # 指定第一列为行索引 sheet = pd.read_excel(path, index_col=0) print(sheet) print('==========================') print('shape of sheet:', sheet.shape) """ name1 name2 name3 row1 1 2.0 3 row2 4 NaN 6 row3 7 8.0 9 ========================== shape of sheet: (3, 3) """
1 Terus tambah kurungan segi empat sama pada indeks
Anda boleh menggunakan kurungan segi empat sama untuk menambah nama lajur Kaedah [col_name] digunakan untuk mengekstrak data lajur tertentu, dan kemudian kurungan segi empat sama ditambah nombor indeks [indeks] digunakan untuk mengindeks nilai kedudukan khusus lajur ini. Di sini, lajur bernama name1 diindeks, dan kemudian data yang terletak di baris 1 lajur (indeks ialah 1) dicetak: 4, seperti berikut:
sheet = pd.read_excel(path) # 读取列名为 name1 的列数据 col = sheet['name1'] print(col) # 打印该列第二个数据 print(col[1]) # 4 """ 0 1 1 4 2 7 Name: name1, dtype: int64 4 """
kaedah iloc, indeks oleh nombor integer
Gunakan indeks sheet.iloc[ ], kurungan segi empat sama ialah nombor kedudukan integer bagi baris dan lajur (bermula dari 0 selepas mengecualikan lajur sebagai indeks baris dan baris sebagai indeks lajur) nombor siri).
a) sheet.iloc[1, 2]: Ekstrak baris 2, lajur 3 data. Yang pertama ialah indeks baris, yang kedua ialah indeks lajur
b) sheet.iloc[0: 2]: Ekstrak dua baris pertamadata
c) sheet.iloc[0:2, 0:2]: Ekstrak dua baris pertama daripada dua lajur pertama data melalui sharding
# 指定第一列数据为行索引 sheet = pd.read_excel(path, index_col=0) # 读取第2行(row2)的第3列(6)数据 # 第一个是行索引,第二个是列索引 data = sheet.iloc[1, 2] print(data) # 6 print('================================') # 通过分片的方式提取 前两行 数据 data_slice = sheet.iloc[0:2] print(data_slice) print('================================') # 通过分片的方式提取 前两行 的 前两列 数据 data_slice = sheet.iloc[0:2, 0:2] print(data_slice) """ 6 ================================ name1 name2 name3 row1 1 2.0 3 row2 4 NaN 6 ================================ name1 name2 row1 1 2.0 row2 4 NaN """
3. kaedah loc, indeks mengikut nama baris dan lajur
gunakan sheet.loc[ ] indeks, kurungan segi empat sama ialah baris dan lajur Rentetan nama . Penggunaan khusus adalah sama seperti iloc , kecuali indeks integer iloc digantikan dengan indeks nama baris dan lajur. Kaedah pengindeksan ini lebih intuitif untuk digunakan.
Nota: iloc[1: 2] tidak mengandungi 2, tetapi loc['row1': 'row2'] tidak Mengandungi 'baris2'.
# 指定第一列数据为行索引 sheet = pd.read_excel(path, index_col=0) # 读取第2行(row2)的第3列(6)数据 # 第一个是行索引,第二个是列索引 data = sheet.loc['row2', 'name3'] print(data) # 1 print('================================') # 通过分片的方式提取 前两行 数据 data_slice = sheet.loc['row1': 'row2'] print(data_slice) print('================================') # 通过分片的方式提取 前两行 的 前两列 数据 data_slice1 = sheet.loc['row1': 'row2', 'name1': 'name2'] print(data_slice1) """ 6 ================================ name1 name2 name3 row1 1 2.0 3 row2 4 NaN 6 ================================ name1 name2 row1 1 2.0 row2 4 NaN """
1. Gunakan isnan() atau daripada pustaka numpy Kaedah isnull() perpustakaan panda menentukan sama ada ia sama dengan nan .
sheet = pd.read_excel(path) # 读取列名为 name1 的列数据 col = sheet['name2'] print(np.isnan(col[1])) # True print(pd.isnull(col[1])) # True """ True True """
2. Gunakan str() untuk menukar kepada rentetan dan tentukan sama ada ia sama dengan 'nan' .
sheet = pd.read_excel(path) # 读取列名为 name1 的列数据 col = sheet['name2'] print(col) # 打印该列第二个数据 if str(col[1]) == 'nan': print('col[1] is nan') """ 0 2.0 1 NaN 2 8.0 Name: name2, dtype: float64 col[1] is nan """
Fahami kod di bawah
# 提取name1 == 1 的行 mask = (sheet['name1'] == 1) x = sheet.loc[mask] print(x) """ name1 name2 name3 row1 1 2.0 3 """
helaian['name2'].replace(2, 100, inplace=True) : Tukar elemen 2 nama lajur2 kepada elemen 100, beroperasi di tempatnya.
sheet['name2'].replace(2, 100, inplace=True) print(sheet) """ name1 name2 name3 row1 1 100.0 3 row2 4 NaN 6 row3 7 8.0 9 """
helaian['name2'].replace(np.nan, 100, inplace=True) : Tukar elemen kosong (nan) dalam lajur name2 kepada elemen 100, beroperasi dalam tempat.
import numpy as np sheet['name2'].replace(np.nan, 100, inplace=True) print(sheet) print(type(sheet.loc['row2', 'name2'])) """ name1 name2 name3 row1 1 2.0 3 row2 4 100.0 6 row3 7 8.0 9 """
Untuk menambah lajur, terus gunakan kurungan segi empat sama [nama untuk ditambahkan] untuk menambah.
helaian['name_add'] = [55, 66, 77]: Tambahkan lajur bernama name_add dengan nilai [55, 66, 77]
path = "test.xlsx" # 指定第一列为行索引 sheet = pd.read_excel(path, index_col=0) print(sheet) print('====================================') # 添加名为 name_add 的列,值为[55, 66, 77] sheet['name_add'] = [55, 66, 77] print(sheet) """ name1 name2 name3 row1 1 2.0 3 row2 4 NaN 6 row3 7 8.0 9 ==================================== name1 name2 name3 name_add row1 1 2.0 3 55 row2 4 NaN 6 66 row3 7 8.0 9 77 """
a) del(sheet['name3']): Gunakan kaedah del untuk memadam
sheet = pd.read_excel(path, index_col=0) # 使用 del 方法删除 'name3' 的列 del(sheet['name3']) print(sheet) """ name1 name2 row1 1 2.0 row2 4 NaN row3 7 8.0 """
b) sheet.drop('row1', axis=0)
Gunakan kaedah drop untuk memadam baris row1 Jika lajur dipadamkan, paksi yang sepadan=1.
Apabila parameter inplace adalah Benar, parameter tidak akan dikembalikan dan data asal akan dipadamkan terus
Apabila parameter inplace adalah Palsu (lalai), data asal tidak akan menjadi. diubah suai, tetapi data yang diubah suai akan dikembalikan Data
sheet.drop('row1', axis=0, inplace=True) print(sheet) """ name1 name2 name3 row2 4 NaN 6 row3 7 8.0 9 """
c) sheet.drop(labels=['name1', 'name2'], axis=1)
<.>Gunakan parameter label=[ ] untuk memadam Berbilang baris atau lajur# 删除多列,默认 inplace 参数位 False,即会返回结果 print(sheet.drop(labels=['name1', 'name2'], axis=1)) """ name3 row1 3 row2 6 row3 9 """9 Simpan ke fail excel: to_excel()
1 Fail .xlsx
names = ['a', 'b', 'c'] scores = [99, 100, 99] result_excel = pd.DataFrame() result_excel["姓名"] = names result_excel["评分"] = scores # 写入excel result_excel.to_excel('test3.xlsx')
2. Simpan fail excel yang diubah suai sebagai fail .xlsx.
Sebagai contoh, selepas mengubah suai nan dalam jadual asal kepada 100, simpan fail:import numpy as np # 指定第一列为行索引 sheet = pd.read_excel(path, index_col=0) sheet['name2'].replace(np.nan, 100, inplace=True) sheet.to_excel('test2.xlsx')Buka test2.xlsx dan hasilnya adalah seperti berikut:
Atas ialah kandungan terperinci Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!