python讀取xlsx文件pandas_用Python的pandas框架操作Excel文件中的數據教程

引言

本文的目的,是向您展示如何使用pandas來執行一些常見的Excel任務。有些例子比較瑣碎,但我覺得展示這些簡單的東西與那些你可以在其他地方找到的復雜功能同等重要。作為額外的福利,我將會進行一些模糊字符串匹配,以此來展示一些小花樣,以及展示pandas是如何利用完整的Python模塊系統去做一些在Python中是簡單,但在Excel中卻很復雜的事情的。

有道理吧?讓我們開始吧。

為某行添加求和項

我要介紹的第一項任務是把某幾列相加然后添加一個總和欄。

首先我們將excel 數據 導入到pandas數據框架中。

import pandas as pd

import numpy as np

df = pd.read_excel("excel-comp-data.xlsx")

df.head()

2015331165924361.jpg?2015231165944

我們想要添加一個總和欄來顯示Jan、Feb和Mar三個月的銷售總額。

在Excel和pandas中這都是簡單直接的。對于Excel,我在J列中添加了公式sum(G2:I2)。在Excel中看上去是這樣的:

2015331165956781.jpg?201523117017

下面,我們是這樣在pandas中操作的:

df["total"] = df["Jan"] + df["Feb"] + df["Mar"]

df.head()

2015331170032225.jpg?201523117048

接下來,讓我們對各列計算一些匯總信息以及其他值。如下Excel表所示,我們要做這些工作:

2015331170102927.jpg?201523117117

如你所見,我們在表示月份的列的第17行添加了SUM(G2:G16),來取得每月的總和。

進行在pandas中進行列級別的分析很簡單。下面是一些例子:

df["Jan"].sum(), df["Jan"].mean(),df["Jan"].min(),df["Jan"].max()

(1462000, 97466.666666666672, 10000, 162000)

現在我們要把每月的總和相加得到它們的和。這里pandas和Excel有點不同。在Excel的單元格里把每個月的總和相加很簡單。由于pandas需要維護整個DataFrame的完整性,所以需要一些額外的步驟。

首先,建立所有列的總和欄

sum_row=df[["Jan","Feb","Mar","total"]].sum()

sum_row

Jan 1462000

Feb 1507000

Mar 717000

total 3686000

dtype: int64

這很符合直覺,不過如果你希望將總和值顯示為表格中的單獨一行,你還需要做一些微調。

我們需要把數據進行變換,把這一系列數字轉換為DataFrame,這樣才能更加容易的把它合并進已經存在的數據中。T 函數可以讓我們把按行排列的數據變換為按列排列。

df_sum=pd.DataFrame(data=sum_row).T

df_sum

2015331170139513.jpg?201523117157

在計算總和之前我們要做的最后一件事情是添加丟失的列。我們使用reindex來幫助我們完成。技巧是添加全部的列然后讓pandas去添加所有缺失的數據。

df_sum=df_sum.reindex(columns=df.columns)

df_sum

2015331170219215.jpg?201523117233

現在我們已經有了一個格式良好的DataFrame,我們可以使用append來把它加入到已有的內容中。

df_final=df.append(df_sum,ignore_index=True)

df_final.tail()

2015331170246729.jpg?20152311735

額外的數據變換

另外一個例子,讓我們嘗試給數據集添加狀態的縮寫。

對于Excel,最簡單的方式是添加一個新的列,對州名使用vlookup函數并填充縮寫欄。

我進行了這樣的操作,下面是其結果的截圖:

2015331170316938.jpg?201523117337

你可以注意到,在進行了vlookup后,有一些數值并沒有被正確的取得。這是因為我們拼錯了一些州的名字。在Excel中處理這一問題是一個巨大的挑戰(對于大型數據集而言)

幸運的是,使用pandas我們可以利用強大的python生態系統。考慮如何解決這類麻煩的數據問題,我考慮進行一些模糊文本匹配來決定正確的值。

幸運的是其他人已經做了很多這方面的工作。fuzzy wuzzy庫包含一些非常有用的函數來解決這類問題。首先要確保你安裝了他。

我們需要的另外一段代碼是州名與其縮寫的映射表。而不是親自去輸入它們,谷歌一下你就能找到這段代碼code。

首先導入合適的fuzzywuzzy函數并且定義我們的州名映射表。

from fuzzywuzzy import fuzz

from fuzzywuzzy import process

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

這里有些介紹模糊文本匹配函數如何工作的例子。

process.extractOne("Minnesotta",choices=state_to_code.keys())

('MINNESOTA', 95)

process.extractOne("AlaBAMMazzz",choices=state_to_code.keys(),score_cutoff=80)

現在我知道它是如何工作的了,我們創建自己的函數來接受州名這一列的數據然后把他轉換為一個有效的縮寫。這里我們使用score_cutoff的值為80。你可以做一些調整,看看哪個值對你的數據來說比較好。你會注意到,返回值要么是一個有效的縮寫,要么是一個np.nan 所以域中會有一些有效的值。

def convert_state(row):

abbrev = process.extractOne(row["state"],choices=state_to_code.keys(),score_cutoff=80)

if abbrev:

return state_to_code[abbrev[0]]

return np.nan

把這列添加到我們想要填充的單元格,然后用NaN填充它

df_final.insert(6, "abbrev", np.nan)

df_final.head()

2015331170756214.jpg?201523117821

我們使用apply 來把縮寫添加到合適的列中。

df_final['abbrev'] = df_final.apply(convert_state, axis=1)

df_final.tail()

2015331170841803.jpg?201523117936

我覺的這很酷。我們已經開發出了一個非常簡單的流程來智能的清理數據。顯然,當你只有15行左右數據的時候這沒什么了不起的。但是如果是15000行呢?在Excel中你就必須進行一些人工清理了。

分類匯總

在本文的最后一節中,讓我們按州來做一些分類匯總(subtotal)。

在Excel中,我們會用subtotal 工具來完成。

2015331171026151.jpg?2015231171048

輸出如下:

2015331171058325.jpg?2015231171121

在pandas中創建分類匯總,是使用groupby 來完成的。

df_sub=df_final[["abbrev","Jan","Feb","Mar","total"]].groupby('abbrev').sum()

df_sub

2015331171140032.jpg?201523117128

然后,我們想要通過對data frame中所有的值使用 applymap 來把數據單位格式化為貨幣。

def money(x):

return "${:,.0f}".format(x)

formatted_df = df_sub.applymap(money)

formatted_df

2015331171220031.jpg?2015231171241

格式化看上去進行的很順利,現在我們可以像之前那樣獲取總和了。

sum_row=df_sub[["Jan","Feb","Mar","total"]].sum()

sum_row

Jan 1462000

Feb 1507000

Mar 717000

total 3686000

dtype: int64

把值變換為列然后進行格式化。

df_sub_sum=pd.DataFrame(data=sum_row).T

df_sub_sum=df_sub_sum.applymap(money)

df_sub_sum

2015331171257647.jpg?2015231171318

最后,把總和添加到DataFrame中。

final_table = formatted_df.append(df_sub_sum)

final_table

2015331171338217.jpg?201523117142

你可以注意到總和行的索引號是‘0'。我們想要使用rename 來重命名它。

final_table = final_table.rename(index={0:"Total"})

final_table

2015331171422425.jpg?2015231171439

結論

到目前為止,大部分人都已經知道使用pandas可以對數據做很多復雜的操作——就如同Excel一樣。因為我一直在學習pandas,但我發現我還是會嘗試記憶我是如何在Excel中完成這些操作的而不是在pandas中。我意識到把它倆作對比似乎不是很公平——它們是完全不同的工具。但是,我希望能接觸到哪些了解Excel并且想要學習一些可以滿足分析他們數據需求的其他替代工具的那些人。我希望這些例子可以幫助到其他人,讓他們有信心認為他們可以使用pandas來替換他們零碎復雜的Excel,進行數據操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

delphi 生成 超大量xml_用OpenCV4實現圖像的超分別率

用OpenCV4實現圖像的超分別率本實驗原文鏈接: f"https://arxiv.org/pdf/1807.06779.pdf">https://arxiv.org/pdf/1807.06779.pdf原文摘要單圖像超分辨率(SISR)的主要挑戰是如何恢復微小紋理等高頻細節。然而,大多數最…

dubbo全局異常處理_基于spring aop的dubbo異常統一處理

dubbo統一異常處理,調用方只顯示封裝后的異常。1、返回封裝后的Exception2、返回封裝后的統一返回信息import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.slf4j.LoggerFactory;impo…

python123平臺作業答案第十一周_馬哥2016全新Linux+Python高端運維班第十次作業

系統的INPUT和OUTPUT默認策略為DROP,請完成以下關于iptables的題目;iptables -A INPUT -d 10.18.11.13 -p tcp --dport 22 -j ACCEPT #允許ssh端口 iptables -A OUTPUT -s 10.18.11.13 -p tcp --sport 22 -j ACCEPT iptables -P OUTPUT DROP #設置OUTPUT…

義教志愿服務系統c語言,[志愿服務]以己為師 東科學子義教傳愛心

為積極響應國家教育計劃,豐富孩子們的暑期生活,進一步落實“春泥”課堂先進義教理念,7月12日,浙江海洋大學東海科學技術學院大學生“海島征程十五載,紅色基因永傳承”赴螞蟻島實踐團23名隊員走進螞蟻島文化禮堂&#x…

主動斷開socket鏈接_TCP連接與斷開詳解(socket通信)

http://blog.csdn.net/Ctrl_qun/article/details/52518479一、TCP數據報結構以及三次握手TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的通信協議,數據在傳輸前要建立連接,傳輸完畢后還要斷開連接。…

大整數算術求值 c語言 棧,用C語言實現 多位整數的四則運算,用棧,例如56*(12+20)-102/2...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓gets(szExpression);// 中綴表達式轉后綴表達式&#xff0c;結果保存在expression中for (int i 0; i < strlen(szExpression); i){if (isspace(szExpression[i])) // 空白字符{if (bFindBegin){expression[num].type 1;expres…

java可視化壓縮_WEB可視化技術發展

EverCraft一直在關注Web可視化技術的發展&#xff0c;本文對國外一篇感覺很不錯的綜述性文章進行翻譯&#xff0c;供這一領域的愛好者相互學習。這篇paper的信息為&#xff1a;“Mwalongo, F., et al., State-of-the-Art Report in Web-based Visualization. COMPUTER GRAPHICS…

thumbdata4刪除后果_安卓手機上巨大的.thumbdata4圖片預讀緩存清理方法

以下是目前找到比較有效的幫 .thumbdata4-文件瘦身的好方法.下面的一大堆廢話的核心就是進手機設置>應用程序>顯示系統程序>媒體存儲器>存儲>清除數據/緩存.重啟后會發現thumbdata還會出現但是沒有數GB那么大了.How do I Reset the AndroidMedia Scan Database?…

android自定義alertdialog不現實輸入法,自定義的dialog中的EditText無法彈出輸入法解決方案...

1.解決無法彈出輸入法&#xff1a;在show()方法調用之前&#xff0c;用dialog.setView(new EditText(context))添加一個空的EditText&#xff0c;由于是自定義的AlertDialog&#xff0c;有我們指定的布局&#xff0c;所以設置這個不會影響我們的功能&#xff0c;這樣就可以彈出…

python爬取微博內容_請問該如何通過python調用新浪微博的API來爬取數據?

1&#xff1a;安裝python(這個不多說啦) 2&#xff1a;下載新浪微博SDK的python包&#xff0c;解壓為weibopy目錄 3&#xff1a;申請AppKey&#xff0c; 流程&#xff1a; 1&#xff1a;通過oAuth認證 按我的理解簡化如下&#xff1a; 用戶在新浪微博給的頁面輸入賬號密碼&…

android 保活方案_Android 后臺保活手段總結 (上篇)

Android 后臺保活手段總結 (上篇)由于眾所周知的限制&#xff0c;在國內無法使用GCM推送服務&#xff0c;想要自己搭建推送服務的話&#xff0c;有兩個繞不開的技術點&#xff0c;一個是TCP長連的保活&#xff0c;另一個就是后臺進程的保活。雖然看起來是老生常談的問題&#x…

linux修改棧指針x86,為什么x86-64 Linux系統調用會修改RCX,這個值意味著什么?

我正在嘗試使用sys_brk syscall在linux中分配一些內存.這是我嘗試過的&#xff1a;BYTES_TO_ALLOCATE equ 0x08section .textglobal _start_start:mov rax, 12mov rdi, BYTES_TO_ALLOCATEsyscallmov rax, 60syscall根據linux調用約定,我希望返回值在rax寄存器中(指向已分配內存…

wordpress phpmyadmin_西部數碼使用指南:虛擬主機WordPress部署SSL注意事項

版權歸西部數碼所有&#xff0c;原文鏈接&#xff1a;https://www.west.cn/faq/list.asp?unid2068注意事項&#xff1a;1.如果您的主題/插件使用絕對地址調用了http請求可能會導致網站打開會亂碼&#xff0c;或不能有綠鎖標識&#xff0c;需要聯系程序提供商將所有http請求修改…

android html轉pdf工具,android – 使用iText庫將html轉換為pdf時未應用hr的內聯CSS

我是.NET開發人員,因此代碼在C#中.但是你應該能夠輕松翻譯以下內容.iText是一個PDF優先的庫,[X] HTML解析非常復雜,因此在這方面并不完整.每當解析[X] HTML并且事情不按預期的方式進行特定標記時,您應遵循的基本步驟是&#xff1a;>驗證XML Worker支持標記&#xff1a;Tags …

python 小說爬蟲_從零開始寫Python爬蟲 --- 1.7 爬蟲實踐: 排行榜小說批量下載

從零開始寫Python爬蟲 --- 1.7 爬蟲實踐&#xff1a; 排行榜小說批量下載Ehco 5 個月前 本來只是準備做一個爬起點小說名字的爬蟲&#xff0c;后來想了一下&#xff0c;為啥不順便把小說的內容也爬下來呢&#xff1f;于是我就寫了這個爬蟲&#xff0c;他爬下了各類小說排行榜上…

java 某個字符在字符串中出現的所有位置_Java面試常考核心概念

這篇文章專注于Java基礎知識&#xff0c;不涉及List、Map、多線程、鎖相關的內容&#xff0c;需要的可以查看我的其他博客hofes blog?hhf443.github.ioJDK&JRE&JVMJDK&#xff08;Java Development Kit&#xff09;是針對 Java 開發員的產品&#xff0c;是整個 Java 的…

lan交換和無線教師手冊_簡單幾步,無線路由器變交換機

當原來的路由器lan口不夠用&#xff0c;可以加一個交換機擴展lan口數量&#xff0c;如果需要增加的lan口數量不超過3個可以考慮找臺不用的無線路由器當交換機用。另外&#xff0c;隨著交換機更新家中都有舊無線路由器閑置&#xff0c;完全可以再次利用。下面看一下&#xff0c;…

Linux fast open,Linux內核3.7 TCP Fast Open驗證實例

Linux內核在3.6和3.7合入了TCP Fast Open特性&#xff0c;在3.7.3版本上驗證了一下&#xff0c;I did it!以下是C語言實例()&#xff1a;server端代碼&#xff1a;#include /* See NOTES */#include#include#includeint main(){int portno 5060;socklen_t clilen;char buffer[…

vue 怎么全局到入常量_Vue 中如何定義全局的變量和常量(轉)

17.6k 次閱讀 讀完需要 10 分鐘7Vue 中如何定義全局的變量和常量我想要定義一個變量, 在項目的任何地方都可以訪問到, 不需要每一次使用的時候, 都引入.嘗試1:創建 global.js 并且在其中定義let a 10;在入口文件中引入 global.jsimport ./global.js在項目中使用:a// 報錯發…

revit找不到附加模塊程序集_TensorFlow基礎知識——常用模塊(一)

1本節簡述對于開展深度學習開發的目標而言&#xff0c;我們需要掌握的除了必要的深度學習理論基礎、必要的開發依賴庫基礎知識、基本的開發套路之外&#xff0c;我們還需要掌握它常見的外圍小幫手都有哪些。這些小幫手就是深度學習依賴庫中的其他并不是核心的模塊&#xff0c;但…