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

          兩個(gè)使用 Pandas 讀取異常數(shù)據(jù)結(jié)構(gòu) Excel 的方法,拿走不謝!

          共 2418字,需瀏覽 5分鐘

           ·

          2022-05-15 10:48

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


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


          文末可以獲取到該文件

          指定列讀取

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

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

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

          此時(shí)我們可以通過 usecols 來指定讀取哪些列數(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開始,所以我們傳入 1,也就是 Excel 中的第 2 行

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

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

          也可以通過列名稱來選擇所需的列數(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 來解析 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 頁,獲取某個(gè) sheet 頁,獲取 Excel 范圍數(shù)據(jù)

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


          現(xiàn)在我們以及知道要加載的數(shù)據(jù)范圍了, 接下來就是將該范圍轉(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)就分享到這里了,我們下次再見!

          需要完整代碼和測(cè)試 Excel 數(shù)據(jù),點(diǎn)點(diǎn)在看,微信私聊獲??!

          END



          推薦閱讀


          牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)

          牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長文系列第②篇)

          牛逼!Python函數(shù)和文件操作(長文系列第③篇)

          牛逼!Python錯(cuò)誤、異常和模塊(長文系列第④篇)


          Ps:從小程序直接獲取下載如下福利

          瀏覽 28
          點(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>
                  国产一级性爱片 | 欧美色图日韩色图 | 青青草国产在线视频 | 欧美性天天影院 | 国产精品久久久久久69 |