Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?

Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?

WBOY
WBOYke hadapan
2023-05-08 21:49:183404semak imbas

1. Baca jadual xlsx: pd.read_excel()

Kandungan asal adalah seperti berikut:

Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?

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
"""

2. Dapatkan saiz data jadual: bentuk

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)
"""

3. Kaedah mengindeks data: [ ] / loc[] / iloc[]

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
"""

4. Tentukan sama ada data kosong: np.isnan() / pd.isnull()

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
"""

5. Cari data yang memenuhi syarat

Fahami kod di bawah

# 提取name1 == 1 的行
mask = (sheet['name1'] == 1)
x = sheet.loc[mask]
print(x)
"""
      name1  name2  name3
row1      1    2.0      3
"""

6. Ubah suai nilai elemen: replace()

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
"""

7. Tambahkan data: [ ]

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
"""

8. Padam data: del() / drop()

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=[&#39;name1&#39;, &#39;name2&#39;], axis=1))
"""
      name3
row1      3
row2      6
row3      9
"""

9 Simpan ke fail excel: to_excel()

1 Fail .xlsx

names = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
scores = [99, 100, 99]
result_excel = pd.DataFrame()
result_excel["姓名"] = names
result_excel["评分"] = scores
# 写入excel
result_excel.to_excel(&#39;test3.xlsx&#39;)

Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?

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[&#39;name2&#39;].replace(np.nan, 100, inplace=True)
sheet.to_excel(&#39;test2.xlsx&#39;)

Buka test2.xlsx dan hasilnya adalah seperti berikut:

Bagaimana untuk memproses data Excel dengan perpustakaan Pandas Python?

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam