电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python pandas對excel的操作實現示例

瀏覽:37日期:2022-07-16 17:22:15

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

增加計算列

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

import pandas as pddf1 = 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

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

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

# 由于是創建,不能使用 df.Totaldf1[’Total’] = df1[’Jan’] + df1[’Feb’] + df1[’Mar’]

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

Python pandas對excel的操作實現示例

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

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

增加條件計算列

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

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

Python pandas對excel的操作實現示例

在指定位置插入列

上面方法增加的列,位置都是放在最后。如果想要在指定位置插入列,要用 dataframe.insert() 方法。假設我們要在 state 列后面插入一列,這一列是 state 的簡稱 (abbreviation)。在 Excel 中,根據 state 來找到 state 的簡稱 ,一般用 VLOOKUP 函數。我們用兩種方法來實現,第一種方法,簡稱來自 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’) # 返回 TXstate_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() 函數值得專門寫一篇,暫且不細說。

Python pandas對excel的操作實現示例

Vlookup 函數功能實現

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

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

Python pandas對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

Python pandas對excel的操作實現示例

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

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

計算合計數

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

import pandas as pdimport numpy as npdf = pd.read_excel(’./excel-comp-data.xlsx’);df[’Total’] = df.Jan + df.Feb + df.Mar# sum_row 的類型是 pandas.core.series.Series, Jan, Feb 等成為 Series 的 indexsum_row = df[[’Jan’, ’Feb’, ’Mar’, ’Total’]].sum()

Python pandas對excel的操作實現示例

也可以將 sum_row 轉換成 DataFrame, 以列的方式查看。DataFrame 的 T 方法實現行列互換。

# 轉置變成 DataFramedf_sum = pd.DataFrame(data=sum_row).Tdf_sum

Python pandas對excel的操作實現示例

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

# 轉置變成 DataFramedf_sum = pd.DataFrame(data=sum_row).T# 將 df_sum 添加到 dfdf_sum = df_sum.reindex(columns=df.columns)# append 創建一個新的 DataFramedf_with_total = df.append(df_sum, ignore_index=True)

Python pandas對excel的操作實現示例

分類匯總

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

Python pandas對excel的操作實現示例

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

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

Python pandas對excel的操作實現示例

數據格式化

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

Python pandas對excel的操作實現示例

數據透視表

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

index 參數: 按什么條件進行匯總 values 參數:對哪些數據進行計算 aggfunc 參數:aggregation function,執行什么運算

# pivot table# pd.pivot_table 生成一個新的 DataFramedf_pivot = pd.pivot_table(df, index=[’state’], values=[’Jan’,’Feb’,’Mar’,’Total’], aggfunc= np.sum)

總結

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

Pandas可以實現對Excel各表各行各列的增刪改查

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

到此這篇關于Python pandas對excel的操作實現示例的文章就介紹到這了,更多相關Python pandas對excel操作內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
主站蜘蛛池模板: 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 培训无忧网-教育培训咨询招生第三方平台 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 科普仪器菏泽市教育教学仪器总厂 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 智慧旅游_智慧景区_微景通-智慧旅游景区解决方案提供商 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 陕西自考报名_陕西自学考试网 | 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 上海噪音治理公司-专业隔音降噪公司-中广通环保 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 元拓建材集团官方网站| 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 旋转滴界面张力仪(张力测定仪器)-百科| 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 海南在线 海南一家|