成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 中利用Pandas處理復雜的Excel數據

開發 后端
在本文中,我們介紹了在Pandas下通過參數輕松刪除行和列以使其格式更加合理。

關于Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕松地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。

問題緣起

pandas read_excel函數在讀取Excel工作表方面做得很好。但是,如果數據不是從頭開始,不是從單元格A1開始的連續表格,則結果會不是很好。比如下面一個銷售表,使用read_excel讀取:

讀取的結果如下所示:

結果中標題表頭變成了Unnamed,而且還會額外增加很多職位NaN列,字段為空的列的值也會被轉換為NaN,這顯然不是我們所期望的。

header和usecols參數

對這樣的非標準格式的表格,我們可以使用read_excel()的header和usecols參數來控制選擇的需要讀取的列。

  1. import pandas as pd 
  2. from pathlib import Path 
  3. src_file = 'sales.xlsx' 

結果的DataFrame包含了我們期望的數據。

代碼中使用header和usecols參數設定了用于顯示標題的列和需要讀取的字段:

  • header參數為一個整數,從0開始索引,其為選擇的行,比如1表示Excel中的第2行。
  • usecols參數設定選擇的Excel列范圍范圍(A-…),例如,B:F表示讀取B到F列。

在某些情況下,可能希望將列定義為數字列表。比如,可以定義整數列數:

  1. df = pd.read_excel(src_file, header=1usecols=[1,2,3,4,5]) 

這對對大型數據集(例如,每3列或僅偶數列)要遵循一定的數字模式,則這個參數方法會很有用。

usecols還可以設定從列名列表讀取。比如上面的例子也可以這樣寫:

  1. df = pd.read_excel( 
  2. src_file, 
  3. header=1
  4. usecols=['item_type', 'order id', 'order date', 'state', 'priority']) 

列順序支持自由選擇,這種命名列列表的方式實際中很有用。

usecols支持一個回調函數column_check,可通過該函數對數據進行處理。

下面是一個簡單的示例:

  1. def column_check(x): 
  2.      if 'unnamed' in x.lower(): 
  3.            return False 
  4.      if 'priority' in x.lower(): 
  5.           return False 
  6.      if 'order' in x.lower(): 
  7.           return True 
  8.     return True 
  1. df = pd.read_excel(src_file, header=1usecols=column_check

column_check按名稱解析每列,每列通過定義True或False,來選擇是否讀取。

usecols也可以使用lambda表達式。下面的示例中定義的需要顯示的字段列表。為了進行比較,通過將名稱轉換為小寫來規范化。

  1. cols_to_use = ['item_type', 'order id', 'order date', 'state', 'priority'] 
  2. df = pd.read_excel(src_file, 
  3. header=1
  4. usecols=lambda x: x.lower() in cols_to_use) 

回調函數為我們提供了許多靈活性,可以處理Excel文件的實際混亂情況。

關于read_exce函數更多參數可以查看官方文檔,下面是一個總結表格:

結合openpyxl

在某些情況下,數據甚至可能在Excel中變得更加復雜。在下面示例中,我們有一個ship_cost要讀取的表。如果必須使用這樣的文件,那么只用pandas函數和選項也很難做到。在這種情況下,可以直接使用openpyxl解析文件并將數據轉換為pandas DataFrame。比如要讀取下面示例的數據:

  1. from openpyxl import load_workbook 
  2. import pandas as pd 
  3. from pathlib import Path 
  4. src_file = ' sales1.xlsx' 

加載整個工作簿:

  1. cc = load_workbook(filename = src_file

查看所有工作表:

  1. cc.sheetnames 

['sales', 'shipping_rates']

要訪問特定的工作表:

  1. sheet = cc['shipping_rates'] 

要查看所有命名表的列表:

  1. sheet.tables.keys() 

dict_keys(['ship_cost'])

該鍵對應于Excel中分配給表的名稱。這樣就可以設定要讀取的Excel范圍:

  1. lookup_table = sheet.tables['ship_cost'] 
  1. lookup_table.ref 

'C8:E16'

這樣就獲得了要加載的數據范圍。最后將其轉換為pandas DataFrame即可。遍歷每一行并轉換為DataFrame:

  1. data = sheet[lookup_table.ref] 
  2. rows_list = [] 
  3.  
  4. for row in data: 
  5. cols = [] 
  6. for col in row: 
  7. cols.append(col.value) 
  8. rows_list.append(cols) 
  9.  
  10. df = pd.DataFrame(data=rows_list[1:], index=Nonecolumns=rows_list[0]) 

結果數據框:

總結

在理想情況下,使用的數據將采用簡單一致的格式。在本文中,我們介紹了在Pandas下通過參數輕松刪除行和列以使其格式更加合理。尤其是結合openpyxl的情況下可以讓我們讀取Excel數據更加靈活,可以處理比較復雜的表格數據。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2023-08-30 09:16:38

PandasPython

2020-02-21 17:10:12

ExcelPython腳本語言

2022-09-26 00:00:02

PandasExcel文件

2023-12-12 11:06:37

PythonPandas數據

2020-09-29 07:13:23

pandashdf5存儲數據

2022-06-24 10:26:07

pandasExcelPython

2020-06-24 11:59:31

PythonPandas數據處理

2025-05-19 08:28:00

2020-06-05 14:29:07

PythonPandas數據分析

2011-07-12 13:01:11

ExcelOracleSql Server

2023-09-25 13:19:41

pandasPython

2022-12-30 15:29:35

數據分析工具Pandas

2021-01-13 11:13:46

ExcelPandas代碼

2022-07-14 07:12:09

PythonPandasVBA

2025-04-03 10:00:00

數據分析Pandas數據合并

2024-05-20 09:31:53

PandasPython大數據集

2017-02-28 10:54:40

Pandas

2024-05-13 11:43:39

Python數據分析CSV

2023-11-27 13:58:00

數據預處理數據標準化

2016-12-20 16:07:13

Python數據預處理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频1区 | 黄色三级免费网站 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | www.av在线| 超碰最新在线 | 欧美精品1区2区 | 欧美精品一区二区三区在线 | 中文字幕在线三区 | 91视频久久久久 | 一区二区三区中文字幕 | 日本福利在线 | 91精品欧美久久久久久久 | 男人天堂国产 | 干一干操一操 | 正在播放亚洲 | 日本精品久久久一区二区三区 | 羞视频在线观看 | 欧美国产视频 | 国产精品污www在线观看 | 国产高清免费 | 国产一区二区欧美 | 一级片免费视频 | 韩日在线 | 免费高清av | 日韩成人 | 免费高潮视频95在线观看网站 | 国产一区二区在线免费播放 | www.久久久久久久久 | 久久夜视频 | 国产美女精品 | 亚洲精品粉嫩美女一区 | 99久久精品免费看国产四区 | 亚洲精品乱码久久久久久按摩 | 国产99久久精品一区二区300 | 日韩国产一区二区三区 | 亚洲欧美日韩国产综合 | 成人视屏在线观看 | 91毛片在线看 | 欧美999| 国产精品视频久久久久久 | 国产日韩欧美一区二区 |