日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Python中利用Pandas處理復(fù)雜的Excel數(shù)據(jù)

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

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、空間域名、虛擬主機(jī)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

問題緣起

pandas read_excel函數(shù)在讀取Excel工作表方面做得很好。但是,如果數(shù)據(jù)不是從頭開始,不是從單元格A1開始的連續(xù)表格,則結(jié)果會(huì)不是很好。比如下面一個(gè)銷售表,使用read_excel讀?。?/p>

讀取的結(jié)果如下所示:

結(jié)果中標(biāo)題表頭變成了Unnamed,而且還會(huì)額外增加很多職位NaN列,字段為空的列的值也會(huì)被轉(zhuǎn)換為NaN,這顯然不是我們所期望的。

header和usecols參數(shù)

對(duì)這樣的非標(biāo)準(zhǔn)格式的表格,我們可以使用read_excel()的header和usecols參數(shù)來控制選擇的需要讀取的列。

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

結(jié)果的DataFrame包含了我們期望的數(shù)據(jù)。

代碼中使用header和usecols參數(shù)設(shè)定了用于顯示標(biāo)題的列和需要讀取的字段:

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

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

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

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

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

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

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

usecols支持一個(gè)回調(diào)函數(shù)column_check,可通過該函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理。

下面是一個(gè)簡(jiǎn)單的示例:

 
 
 
 
  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=1, usecols=column_check)

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

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

 
 
 
 
  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)

回調(diào)函數(shù)為我們提供了許多靈活性,可以處理Excel文件的實(shí)際混亂情況。

關(guān)于read_exce函數(shù)更多參數(shù)可以查看官方文檔,下面是一個(gè)總結(jié)表格:

結(jié)合openpyxl

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

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

加載整個(gè)工作簿:

 
 
 
 
  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'])

該鍵對(duì)應(yīng)于Excel中分配給表的名稱。這樣就可以設(shè)定要讀取的Excel范圍:

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

'C8:E16'

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

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

結(jié)果數(shù)據(jù)框:

總結(jié)

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


網(wǎng)站題目:Python中利用Pandas處理復(fù)雜的Excel數(shù)據(jù)
文章URL:http://www.5511xx.com/article/dhpdpjg.html