<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          簡(jiǎn)單好用!Pandas 讀取異常數(shù)據(jù)結(jié)構(gòu) Excel!

          共 3533字,需瀏覽 8分鐘

           ·

          2021-12-20 03:46

          ↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

          大家好,我是龍哥!

          通常情況下,我們使用 Pandas 來(lái)讀取 Excel 數(shù)據(jù),可以很方便的把數(shù)據(jù)轉(zhuǎn)化為 DataFrame 類型。但是現(xiàn)實(shí)情況往往很骨干,當(dāng)我們遇到結(jié)構(gòu)不是特別良好的 Excel 的時(shí)候,常規(guī)的 Pandas 讀取操作就不怎么好用了,今天我們就來(lái)看兩個(gè)讀取非常規(guī)結(jié)構(gòu) Excel 數(shù)據(jù)的例子


          本文使用的測(cè)試 Excel 內(nèi)容如下


          文末可以獲取到該文件

          指定列讀取

          一般情況下,我們使用 read_excel 函數(shù)讀取 Excel 數(shù)據(jù)時(shí),都是默認(rèn)從第 A 列開(kāi)始讀取的,但是對(duì)于某些 Excel 數(shù)據(jù),往往不是從第 A 列就有數(shù)據(jù)的,此時(shí)我們需要參數(shù) usecols 來(lái)進(jìn)行規(guī)避處理

          比如上面的 Excel 數(shù)據(jù),如果我們直接使用 read_excel(src_file) 讀取,會(huì)得到如下結(jié)果

          我們得到了很多未命名的列以及很多我們根本不需要的列數(shù)據(jù)

          此時(shí)我們可以通過(guò) usecols 來(lái)指定讀取哪些列數(shù)據(jù)

          from pathlib import Path
          src_file = Path.cwd() /  'shipping_tables.xlsx'

          df = pd.read_excel(src_file, header=1, usecols='B:F')


          可以看到生成的 DataFrame 中只包含我們需要的數(shù)據(jù),特意排除了 notes 列和 date 字段

          usecols 可以接受一個(gè) Excel 列的范圍,例如 B:F 并僅讀取這些列,header 參數(shù)需要一個(gè)定義標(biāo)題列的整數(shù),它的索引從0開(kāi)始,所以我們傳入 1,也就是 Excel 中的第 2 行

          我們也可以將列定義為數(shù)字列表

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

          也可以通過(guò)列名稱來(lái)選擇所需的列數(shù)據(jù)

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

          這種做法在列的順序改變但是列的名稱不變的時(shí)候非常有用

          最后,usecols 還可以接受一個(gè)可調(diào)用的函數(shù)

          def column_check(x):
              if 'unnamed' in x.lower():
                  return False
              if 'priority' in x.lower():
                  return False
              if 'order' in x.lower():
                  return True
              return True

          df = pd.read_excel(src_file, header=1, usecols=column_check)

          該函數(shù)將按名稱解析每一列,并且必須為每一列返回 True 或 False

          當(dāng)然也可以使用 lambda 表達(dá)式

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

          范圍和表格

          在某些情況下,Excel 中的數(shù)據(jù)可能會(huì)更加不確定,在我們的 Excel 數(shù)據(jù)中,我們有一個(gè)想要讀取的名為 ship_cost 的表,這該怎么獲取呢

          在這種情況下,我們可以直接使用 openpyxl 來(lái)解析 Excel 文件并將數(shù)據(jù)轉(zhuǎn)換為 pandas DataFrame

          以下是使用 openpyxl(安裝后)讀取 Excel 文件的方法:

          from openpyxl import load_workbook
          import pandas as pd
          from pathlib import Path
          src_file = src_file = Path.cwd() / 'shipping_tables.xlsx'

          wb = load_workbook(filename = src_file)

          查看所有的 sheet 頁(yè),獲取某個(gè) sheet 頁(yè),獲取 Excel 范圍數(shù)據(jù)

          wb.sheetnames
          sheet = wb['shipping_rates']
          lookup_table = sheet.tables['ship_cost']
          lookup_table.ref


          現(xiàn)在我們以及知道要加載的數(shù)據(jù)范圍了, 接下來(lái)就是將該范圍轉(zhuǎn)換為 Pandas DataFrame

          # 獲取數(shù)據(jù)范圍
          data = sheet[lookup_table.ref]
          rows_list = []

          # 循環(huán)獲取數(shù)據(jù)
          for row in data:
              cols = []
              for col in row:
                  cols.append(col.value)
              rows_list.append(cols)


          df = pd.DataFrame(data=rows_list[1:], index=None, columns=rows_list[0])


          這樣我們就獲取到了干凈的表數(shù)據(jù)了

          好了,今天的兩個(gè)小知識(shí)點(diǎn)就分享到這里了,我們下次再見(jiàn)!

          推薦閱讀

          1. 最全Pandas中文教程合集,收藏起來(lái)!

          2. 一次超愉快的「Python自動(dòng)化」接單記錄,到手500塊,不香嗎?

          3. 手把手教你如何利用Python薅羊毛(快手極速版)



          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  2020年香蕉在线视频观看拒绝收费 | 日韩毛片网| 国产高清肏屄自拍 | 黄色一二三区 | www.自拍偷拍 |