Pandas 讀存 Excel 大全

公衆號:尤而小屋
作者:Peter
編輯:Peter

本文記錄的是如何通過 Pandas 來讀取 Excel 文件,以及如何將 DataFrame 保存到 Excel 文件中

官網參數詳解:https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html

參數

read_excel 函數能夠讀取的格式包含:xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件擴展名。支持讀取單一 sheet 或幾個 sheet。

下面記錄的官方文檔中提供的全部參數信息:

pandas.read_excel(
  io,    
  sheet_name=0, 
  header=0, 
  names=None, 
  index_col=None, 
  usecols=None, 
  squeeze=None, 
  dtype=None, 
  engine=None, 
  converters=None, 
  true_values=None, 
  false_values=None, 
  skiprows=None, 
  nrows=None, 
  na_values=None,
  keep_default_na=True, 
  na_filter=True, 
  verbose=False, 
  parse_dates=False, 
  date_parser=None, 
  thousands=None, 
  decimal='.', 
  comment=None, 
  skipfooter=0, 
  convert_float=None, 
  mangle_dupe_cols=True, 
  storage_options=None
)

下面解釋常用參數的含義:

模擬數據

現在本次模擬了兩個數據**:Pandas_Excel.xls 和 Pandas_Excel.xlsx**

Pandas_Excel.xls 文件中包含兩個 sheet,第二個數據只比第一個多個 index 的信息

1、sheet1 的內容

2、sheet2 的內容

3、Pandas_Excel.xlsx 的內容,模擬的完整信息:

import pandas as pd

默認情況

此時文件剛好在當前目錄下,讀取的時候指定文件名即可,可以看到讀取的是第一個 sheet

df = pd.read_excel("Pandas-Excel.xls")
df

hwUYOT

參數 io

填寫完整的文件路徑作爲 io 的取值。也可以使用相對路徑

pd.read_excel(r"/Users/peter/Desktop/pandas/Pandas-Excel.xls")

ye1Gvo

參數 sheet_name

# pd.read_excel("Pandas-Excel.xls", sheet_name=0) # 效果同上

# 直接指定sheet的名字
pd.read_excel("Pandas-Excel.xls", sheet_) # 效果同上

hBUGq9

換成讀取第二個 sheet:名稱是 Sheet2

pd.read_excel("Pandas-Excel.xls", sheet_)

ymM1HG

結果中多了一列 index 的取值

參數 header

# 和默認情況相同

pd.read_excel("Pandas-Excel.xls"header=[0])

RncFg5

pd.read_excel("Pandas-Excel.xls"header=[1])  # 單個元素

第一行的數據當做列屬性:

BnKXIX

傳入多個元素會形成多層索引:

pd.read_excel("Pandas-Excel.xls"header=[0,1])   # 多個元素

AO9cXV

參數 names

# 指定列名稱

pd.read_excel("Pandas-Excel.xls"names=["a","b","c","d","e"])

nCmRdF

參數 index_col

# 指定單個元素作爲索引
pd.read_excel("Pandas-Excel.xls"index_col=[0])

HaQoHu

# 多個元素
pd.read_excel("Pandas-Excel.xls"index_col=[0,1])

wjcXq0

參數 usecols

pd.read_excel("Pandas-Excel.xls"usecols=[0])   # 單個字段

aHQaOX

pd.read_excel("Pandas-Excel.xls"usecols=[0,2,4])   # 多個字段

jxm9Vn

# 直接指定名稱
    
pd.read_excel("Pandas-Excel.xls"usecols=["age","sex"])

bekmvs

# 傳入匿名函數,字段中包含a,結果sex沒有了

pd.read_excel("Pandas-Excel.xls"usecols=lambda x: "a" in x)

XIkZ3Q

參數 dtype

df.dtypes
name               object
age                 int64
sex                object
address            object
date       datetime64[ns]
dtype: object

從上面的結果中看到 age 字段,在默認情況下讀取的是 int64 類型:

# 指定數據類型
df1 = pd.read_excel("Pandas-Excel.xls"dtype={"age":"float64"})

# 查看字段信息
df1.dtypes
name               object
age               float64  # 修改
sex                object
address            object
date       datetime64[ns]
dtype: object

參數 engine

# xls 結尾

pd.read_excel("Pandas-Excel.xls"engine="xlrd")

EYtKAH

# xlsx 結尾
pd.read_excel("Pandas-Excel.xlsx"engine="openpyxl")

FivRsw

參數 converters

pd.read_excel("Pandas-Excel.xlsx")  # 默認操作

IfmAJQ

pd.read_excel("Pandas-Excel.xlsx", 
              usecols=[1,3],  # 1-age  3-address 數值爲原索引號
              converters={0:lambda x: x+5,  # 0代表上面[1,3]中的索引號
                          1:lambda x: x + "市"
                         })

qxHsUk

參數 skiprows

pd.read_excel("Pandas-Excel.xls")   # 默認情況

xauQdK

把張三和李四所在的行直接跳過:

pd.read_excel("Pandas-Excel.xls"skiprows=2)

bKnifO

# 跳過偶數行

pd.read_excel("Pandas-Excel.xls"skiprows=lambda x: x%2 == 0)

QTq2T4

參數 nrows

# 指定讀取的行數

pd.read_excel("Pandas-Excel.xls"nrows=2)

a7opSS

參數 na_values

pd.read_excel("Pandas-Excel.xls")  # 默認

vvBxIL

pd.read_excel("Pandas-Excel.xls", 
              na_values={"sex":"未知"})

sex 字段中的未知顯示成了 NaN:

6RTV4T

參數 keep_default_na

pd.read_excel("Pandas-Excel.xls")  # 默認keep_default_na=True

AgBiXg

pd.read_excel("Pandas-Excel.xls"keep_default_na=False)

iNWpSP

輸出到 excel 文件

簡單模擬一份數據:

df2 = pd.DataFrame({"num1":[1,2,3],
                   "num2":[4,5,6],
                   "num3":[7,8,9]})
df2

p6aXSf

df2.to_excel("newdata_1.xlsx")

效果如下:

df2.to_excel("newdata_2.xlsx",index=False)

不會帶上索引號

尤而小屋 尤而小屋,一個溫馨且有愛的小屋🏡 小屋主人,一手代碼謀求生存,一手掌勺享受生活,歡迎你的光臨~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/YgjQPlea5lpdi9jo_OCvBA