欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python pandas對excel的操作實現(xiàn)示例

 更新時間:2020年07月21日 10:08:45   作者:明哥看世界  
這篇文章主要介紹了Python pandas對excel的操作實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近經??吹礁髌脚_里都有Python的廣告,都是對excel的操作,這里明哥收集整理了一下pandas對excel的操作方法和使用過程。本篇介紹 pandas 的 DataFrame 對列 (Column) 的處理方法。示例數據請通過明哥的gitee進行下載。

增加計算列

pandas 的 DataFrame,每一行或每一列都是一個序列 (Series)。比如:

import pandas as pd
df1 = pd.read_excel('./excel-comp-data.xlsx');

此時,用 type(df1['city'],顯示該數據列(column)的類型是 pandas.core.series.Series。理解每一列都是 Series 非常重要,因為 pandas 基于 numpy,對數據的計算都是整體計算。深刻理解這個,才能理解后面要說的諸如 apply() 函數等。

如果列名 (column name)沒有空格,則列有兩種方式表達:

df1['city'] 
df1.city

如果列名有空格,或者創(chuàng)建新列(即該列不存在,需要創(chuàng)建,第一次使用的變量),則只能用第一種表達式。

假設我們要對三個月的數據進行匯總,可以使用下面的方法。實際上就是創(chuàng)建一個新的數據列:

# 由于是創(chuàng)建,不能使用 df.Total
df1['Total'] = df1['Jan'] + df1['Feb'] + df1['Mar']

df1['Jan']df1['Mar'] 都是 Series,所以使用 + 號,可以得到三個 Series 對應位置的數據合計。

當然,也可以用下面的方式:

df1['total'] = df1.Jan + df1.Feb + df1.Mar

增加條件計算列

假設現(xiàn)在要根據合計數 (Total 列),當 Total 大于 200,000 ,類別為 A,否則為 B。在 Excel 中實現(xiàn)用的是 IF 函數,但在 pandas 中需要用到 numpy 的 where 函數:

df1['category'] = np.where(df1['total'] > 200000, 'A', 'B')

在指定位置插入列

上面方法增加的列,位置都是放在最后。如果想要在指定位置插入列,要用 dataframe.insert() 方法。假設我們要在 state 列后面插入一列,這一列是 state 的簡稱 (abbreviation)。在 Excel 中,根據 state 來找到 state 的簡稱 ,一般用 VLOOKUP 函數。我們用兩種方法來實現(xiàn),第一種方法,簡稱來自 Python 的 dict。

數據來源:

state_to_code = {"VERMONT": "VT", "GEORGIA": "GA", "IOWA": "IA", "Armed Forces Pacific": "AP", "GUAM": "GU",
         "KANSAS": "KS", "FLORIDA": "FL", "AMERICAN SAMOA": "AS", "NORTH CAROLINA": "NC", "HAWAII": "HI",
         "NEW YORK": "NY", "CALIFORNIA": "CA", "ALABAMA": "AL", "IDAHO": "ID", "FEDERATED STATES OF MICRONESIA": "FM",
         "Armed Forces Americas": "AA", "DELAWARE": "DE", "ALASKA": "AK", "ILLINOIS": "IL",
         "Armed Forces Africa": "AE", "SOUTH DAKOTA": "SD", "CONNECTICUT": "CT", "MONTANA": "MT", "MASSACHUSETTS": "MA",
         "PUERTO RICO": "PR", "Armed Forces Canada": "AE", "NEW HAMPSHIRE": "NH", "MARYLAND": "MD", "NEW MEXICO": "NM",
         "MISSISSIPPI": "MS", "TENNESSEE": "TN", "PALAU": "PW", "COLORADO": "CO", "Armed Forces Middle East": "AE",
         "NEW JERSEY": "NJ", "UTAH": "UT", "MICHIGAN": "MI", "WEST VIRGINIA": "WV", "WASHINGTON": "WA",
         "MINNESOTA": "MN", "OREGON": "OR", "VIRGINIA": "VA", "VIRGIN ISLANDS": "VI", "MARSHALL ISLANDS": "MH",
         "WYOMING": "WY", "OHIO": "OH", "SOUTH CAROLINA": "SC", "INDIANA": "IN", "NEVADA": "NV", "LOUISIANA": "LA",
         "NORTHERN MARIANA ISLANDS": "MP", "NEBRASKA": "NE", "ARIZONA": "AZ", "WISCONSIN": "WI", "NORTH DAKOTA": "ND",
         "Armed Forces Europe": "AE", "PENNSYLVANIA": "PA", "OKLAHOMA": "OK", "KENTUCKY": "KY", "RHODE ISLAND": "RI",
         "DISTRICT OF COLUMBIA": "DC", "ARKANSAS": "AR", "MISSOURI": "MO", "TEXAS": "TX", "MAINE": "ME"}

如果我們想根據 dict 的 key 找到對應的值,可以使用 dict.get() 方法,這個方法在找不到 key 的時候,不會拋出異常,只是返回 None。比如

state_to_code.get('TEXAS') # 返回 TX
state_to_code.get('TEXASS') # 返回 None

dict.get() 方法參數為 key,是一個標量值。我們并不能像下面這樣把整列都傳給這個方法,比如下面這樣:

df1['abbrev'] = state_to_code.get(df1['state'])

所以我們需要先構造一個 Series (abbrev),然后把 abbrev 賦值給 df1['abbrev']

abbrev = df1['state'].apply(lambda x: state_to_code.get(x.upper()))
df1['abbrev'] = abbrev    # 在后面插入列
df1.insert(6, 'abbr', abbrev) # 在指定位置插入列

apply() 函數值得專門寫一篇,暫且不細說。

Vlookup 函數功能實現(xiàn)

實現(xiàn)類似 Excel 的 VLookup 功能,可以用 dataframe.merge() 方法。為此,需要將 state_to_code 這個 dict 的數據加載到 DataFrame 中。這里提供兩種方法。

方法1: 把數據放在 excel 工作表中,然后讀取 Excel 文件加載。數據如下:

excel_file = pd.ExcelFile('excel-comp-data.xlsx')
df_abbrev = pd.read_excel(excel_file, sheetname = 'abbrev')
df2 = df1.merge(df_abbrev, on='state') # 類似數據庫的 inner join,不匹配數據不會顯示

VLookup 函數根據位置來匹配,merge() 方法根據列名來匹配。因為上面語句中沒有指定連接類型,不匹配的記錄不會顯示。如果需要將 df1 的數據全部顯示出來,需要指定 merge() 方法的 how 參數:

df3 = df1.merge(df_abbrev, on='state', how='left') # 類似數據庫的 left join

方法2:直接將 state_to_code 加載到 DataFrame。但因為 state_to_code 全部是標量值 (scalar values),方法有一點不同,如下:

# 將 state_to_code 直接加載到 DataFrame
abbr2 = pd.DataFrame(list(state_to_code.items()), columns=['state', 'abbr'])

計算合計數

假如需要對各個月份以及月份合計數進行求和。pandas 可以對 Series 運行 sum() 方法來計算合計:

import pandas as pd
import numpy as np

df = pd.read_excel('./excel-comp-data.xlsx');
df['Total'] = df.Jan + df.Feb + df.Mar

# sum_row 的類型是 pandas.core.series.Series, Jan, Feb 等成為 Series 的 index
sum_row = df[['Jan', 'Feb', 'Mar', 'Total']].sum()

也可以將 sum_row 轉換成 DataFrame, 以列的方式查看。DataFrameT 方法實現(xiàn)行列互換。

# 轉置變成 DataFrame
df_sum = pd.DataFrame(data=sum_row).T
df_sum

如果想要把合計數放在數據的下方,則要稍作加工。首先通過 reindex() 函數將 df_sum 變成與 df 具有相同的列,然后再通過 append() 方法,將合計行放在數據的后面:

# 轉置變成 DataFrame
df_sum = pd.DataFrame(data=sum_row).T

# 將 df_sum 添加到 df
df_sum = df_sum.reindex(columns=df.columns)

# append 創(chuàng)建一個新的 DataFrame
df_with_total = df.append(df_sum, ignore_index=True)

分類匯總

Excel 的分類匯總功能,在數據功能區(qū),但因為分類匯總需要對數據進行排序,并且分類匯總的數據與明細數據混在一起,個人很少用到,分類匯總一般使用數據透視表。

而在 pandas 進行分類匯總,可以使用 DataFramegroupby() 函數,然后再對 groupby() 生成的 pandas.core.groupby.DataFrameGroupBy 對象進行求和:

df_groupby = df[['state','Jan', 'Feb','Mar', 'Total']].groupby('state').sum()
df_groupby.head()

數據格式化

pandas 默認的數據顯示,沒有使用千分位分隔符,在數據較大時,感覺不方便。如果需要對數據的顯示格式化,可以自定義一個函數 number_format(),然后對 DataFrame 運行 applymap(number_format) 函數。applymap() 函數對 DataFrame 中每一個元素都運行 number_format 函數。number_format 函數接受的參數必須為標量值,返回的也是標量值。

# 數字格式化
def number_format(x):
  return "{:,.0f}".format(x) # 使用逗號分隔,沒有小數位

formated_df = df_groupby.applymap(number_format)
formated_df.head()

數據透視表

pandas 運行數據透視表,使用 pivot_table() 方法。熟練使用 pivot_table() 需要一些練習。這里只是介紹最基本的功能:

  • index 參數: 按什么條件進行匯總
  • values 參數:對哪些數據進行計算
  • aggfunc 參數:aggregation function,執(zhí)行什么運算
# pivot table
# pd.pivot_table 生成一個新的 DataFrame
df_pivot = pd.pivot_table(df, index=['state'], values=['Jan','Feb','Mar','Total'], aggfunc= np.sum)

總結

Pandas可以對Excel進行基礎的讀寫操作

Pandas可以實現(xiàn)對Excel各表各行各列的增刪改查

Pandas可以進行表中列行篩選等

到此這篇關于Python pandas對excel的操作實現(xiàn)示例的文章就介紹到這了,更多相關Python pandas對excel操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python中的pyc文件是什么

    python中的pyc文件是什么

    這篇文章主要介紹了python中的pyc文件是什么,pyc文件是Python編譯過的字節(jié)碼文件,這個字節(jié)碼是一種低級的、與平臺無關的代碼,還不知道的朋友來了解一下吧
    2023-04-04
  • 基于python的selenium兩種文件上傳操作實現(xiàn)詳解

    基于python的selenium兩種文件上傳操作實現(xiàn)詳解

    這篇文章主要介紹了基于python的selenium兩種文件上傳操作實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python中摘要算法MD5,SHA1簡介及應用實例代碼

    Python中摘要算法MD5,SHA1簡介及應用實例代碼

    這篇文章主要介紹了Python中摘要算法MD5,SHA1簡介及應用實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python的Django框架中if標簽的相關使用

    Python的Django框架中if標簽的相關使用

    這篇文章主要介紹了Python的Django框架中if標簽的相關使用,是Django框架使用中的基礎知識,需要的朋友可以參考下
    2015-07-07
  • Python實現(xiàn)全自動輸入文本的示例詳解

    Python實現(xiàn)全自動輸入文本的示例詳解

    這篇文章主要和大家分享一個Python全自動輸入文本的腳本,可以實現(xiàn)自動用Notepad++打開文本文件,然后自動輸入文本,最后保存并關閉文件,從而實現(xiàn)全面自動化處理文本,希望對大家有所幫助
    2022-11-11
  • Python區(qū)塊鏈創(chuàng)世塊創(chuàng)建教程

    Python區(qū)塊鏈創(chuàng)世塊創(chuàng)建教程

    這篇文章主要為大家介紹了Python區(qū)塊鏈創(chuàng)世塊創(chuàng)建教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 解決安裝python庫時windows error5 報錯的問題

    解決安裝python庫時windows error5 報錯的問題

    今天小編就為大家分享一篇解決安裝python庫時windows error5 報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python 產生token及token驗證的方法

    python 產生token及token驗證的方法

    今天小編就為大家分享一篇python 產生token及token驗證的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python配置文件解析模塊ConfigParser使用實例

    Python配置文件解析模塊ConfigParser使用實例

    這篇文章主要介紹了Python配置文件解析模塊ConfigParser使用實例,本文講解了figParser簡介、ConfigParser 初始工作、ConfigParser 常用方法、ConfigParser使用實例等內容,需要的朋友可以參考下
    2015-04-04
  • python數據寫入Excel文件中的實現(xiàn)步驟

    python數據寫入Excel文件中的實現(xiàn)步驟

    Python作為時下流行的語言,數據寫入Excel是必要的操作,下面這篇文章主要給大家介紹了關于python數據寫入Excel文件中的簡單實現(xiàn)方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論