最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

增加計(jì)算列

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

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

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

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

df1['city'] 
df1.city

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

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

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

df1['Jan']df1['Mar'] 都是 Series,所以使用 + 號(hào),可以得到三個(gè) Series 對(duì)應(yīng)位置的數(shù)據(jù)合計(jì)。

當(dāng)然,也可以用下面的方式:

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

增加條件計(jì)算列

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

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

在指定位置插入列

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

數(shù)據(jù)來(lái)源:

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

如果我們想根據(jù) dict 的 key 找到對(duì)應(yīng)的值,可以使用 dict.get() 方法,這個(gè)方法在找不到 key 的時(shí)候,不會(huì)拋出異常,只是返回 None。比如

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

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

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

所以我們需要先構(gòu)造一個(gè) 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() 函數(shù)值得專門(mén)寫(xiě)一篇,暫且不細(xì)說(shuō)。

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

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

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

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

VLookup 函數(shù)根據(jù)位置來(lái)匹配,merge() 方法根據(jù)列名來(lái)匹配。因?yàn)樯厦嬲Z(yǔ)句中沒(méi)有指定連接類型,不匹配的記錄不會(huì)顯示。如果需要將 df1 的數(shù)據(jù)全部顯示出來(lái),需要指定 merge() 方法的 how 參數(shù):

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

方法2:直接將 state_to_code 加載到 DataFrame。但因?yàn)?state_to_code 全部是標(biāo)量值 (scalar values),方法有一點(diǎn)不同,如下:

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

計(jì)算合計(jì)數(shù)

假如需要對(duì)各個(gè)月份以及月份合計(jì)數(shù)進(jìn)行求和。pandas 可以對(duì) Series 運(yùn)行 sum() 方法來(lái)計(jì)算合計(jì):

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 轉(zhuǎn)換成 DataFrame, 以列的方式查看。DataFrameT 方法實(shí)現(xiàn)行列互換。

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

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

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

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

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

分類匯總

Excel 的分類匯總功能,在數(shù)據(jù)功能區(qū),但因?yàn)榉诸悈R總需要對(duì)數(shù)據(jù)進(jìn)行排序,并且分類匯總的數(shù)據(jù)與明細(xì)數(shù)據(jù)混在一起,個(gè)人很少用到,分類匯總一般使用數(shù)據(jù)透視表。

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

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

數(shù)據(jù)格式化

pandas 默認(rèn)的數(shù)據(jù)顯示,沒(méi)有使用千分位分隔符,在數(shù)據(jù)較大時(shí),感覺(jué)不方便。如果需要對(duì)數(shù)據(jù)的顯示格式化,可以自定義一個(gè)函數(shù) number_format(),然后對(duì) DataFrame 運(yùn)行 applymap(number_format) 函數(shù)。applymap() 函數(shù)對(duì) DataFrame 中每一個(gè)元素都運(yùn)行 number_format 函數(shù)。number_format 函數(shù)接受的參數(shù)必須為標(biāo)量值,返回的也是標(biāo)量值。

# 數(shù)字格式化
def number_format(x):
  return "{:,.0f}".format(x) # 使用逗號(hào)分隔,沒(méi)有小數(shù)位

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

數(shù)據(jù)透視表

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

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

總結(jié)

Pandas可以對(duì)Excel進(jìn)行基礎(chǔ)的讀寫(xiě)操作

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

Pandas可以進(jìn)行表中列行篩選等

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

相關(guān)文章

  • Python中五種列表拷貝的方法

    Python中五種列表拷貝的方法

    這篇文章主要介紹了Python中五種列表拷貝的方法,在Python中,我們經(jīng)常會(huì)遇到需要拷貝列表的情形,下面針對(duì)常用的列表拷貝方法進(jìn)行介紹和總結(jié),希望可以給大家?guī)?lái)更多感性的認(rèn)識(shí)
    2022-02-02
  • python讀寫(xiě)LMDB文件的方法

    python讀寫(xiě)LMDB文件的方法

    這篇文章主要為大家詳細(xì)介紹了python讀寫(xiě)LMDB文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python Pexpect模塊的使用

    python Pexpect模塊的使用

    這篇文章主要介紹了python Pexpect模塊的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例

    Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例

    這篇文章主要介紹了Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 詳解Python中sorted()和sort()的使用與區(qū)別

    詳解Python中sorted()和sort()的使用與區(qū)別

    眾所周知,在Python中常用的排序函數(shù)為sorted()和sort()。本文將詳細(xì)介紹sorted()和sort()方法的代碼示例,并解釋兩者之間的區(qū)別,感興趣的可以了解一下
    2022-03-03
  • Python3+PyCharm+Django+Django REST framework配置與簡(jiǎn)單開(kāi)發(fā)教程

    Python3+PyCharm+Django+Django REST framework配置與簡(jiǎn)單開(kāi)發(fā)教程

    這篇文章主要介紹了Python3+PyCharm+Django+Django REST framework配置與簡(jiǎn)單開(kāi)發(fā)教程,需要的朋友可以參考下
    2021-02-02
  • Python3讀取文件的操作詳解

    Python3讀取文件的操作詳解

    說(shuō)到fileinput,可能90%的碼農(nóng)表示沒(méi)用過(guò),甚至沒(méi)有聽(tīng)說(shuō)過(guò)。但是,今天小編還是要介紹fileinput這個(gè)方法,因?yàn)樘嗡沽耍旄S小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • PyTorch高級(jí)教程之自定義模型、數(shù)據(jù)加載及設(shè)備間數(shù)據(jù)移動(dòng)

    PyTorch高級(jí)教程之自定義模型、數(shù)據(jù)加載及設(shè)備間數(shù)據(jù)移動(dòng)

    在深入理解了PyTorch的核心組件之后,我們將進(jìn)一步學(xué)習(xí)一些高級(jí)主題,包括如何自定義模型、加載自定義數(shù)據(jù)集,以及如何在設(shè)備(例如CPU和GPU)之間移動(dòng)數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • Python數(shù)據(jù)可視化:冪律分布實(shí)例詳解

    Python數(shù)據(jù)可視化:冪律分布實(shí)例詳解

    今天小編就為大家分享一篇Python數(shù)據(jù)可視化:冪律分布實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Django?后端數(shù)據(jù)傳給前端的實(shí)現(xiàn)示例

    Django?后端數(shù)據(jù)傳給前端的實(shí)現(xiàn)示例

    本文主要介紹了Django?后端數(shù)據(jù)傳給前端的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評(píng)論

加查县| 三门峡市| 壶关县| 时尚| 吉隆县| 湖口县| 张北县| 秭归县| 新源县| 湘潭市| 威远县| 山阴县| 东海县| 东明县| 纳雍县| 墨玉县| 赞皇县| 德惠市| 平遥县| 大余县| 光山县| 沅江市| 龙泉市| 涟水县| 太保市| 同德县| 西安市| 曲靖市| 富川| 霍州市| 平罗县| 永宁县| 宜城市| 抚州市| 罗田县| 长沙县| 余江县| 伊宁县| 日照市| 乌兰浩特市| 高碑店市|