亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

增加計算列

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

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

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

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

df1[’city’] df1.city

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

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

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

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

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

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

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

增加條件計算列

假設(shè)現(xiàn)在要根據(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’)

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

在指定位置插入列

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

數(shù)據(jù)來源:

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 找到對應(yīng)的值,可以使用 dict.get() 方法,這個方法在找不到 key 的時候,不會拋出異常,只是返回 None。比如

state_to_code.get(’TEXAS’) # 返回 TXstate_to_code.get(’TEXASS’) # 返回 None

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

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

所以我們需要先構(gòu)造一個 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ù)值得專門寫一篇,暫且不細(xì)說。

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

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

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

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

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

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ù)庫的 inner join,不匹配數(shù)據(jù)不會顯示

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

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

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

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

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

計算合計數(shù)

假如需要對各個月份以及月份合計數(shù)進(jìn)行求和。pandas 可以對 Series 運(yùn)行 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的操作實(shí)現(xiàn)示例

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

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

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

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

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

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

分類匯總

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

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

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

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

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

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

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

# 數(shù)字格式化def number_format(x): return '{:,.0f}'.format(x) # 使用逗號分隔,沒有小數(shù)位formated_df = df_groupby.applymap(number_format)formated_df.head()

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

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

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

index 參數(shù): 按什么條件進(jìn)行匯總 values 參數(shù):對哪些數(shù)據(jù)進(jìn)行計算 aggfunc 參數(shù):aggregation function,執(zhí)行什么運(yùn)算

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

總結(jié)

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

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

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

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

標(biāo)簽: python
相關(guān)文章:
主站蜘蛛池模板: 国产一区不卡 | 日本一二三本免费视频 | 国产又污又爽又色的网站 | 国产一级αv片免费观看 | 看黄视频免费 | 黄色va| 午夜在线视频国产 | 男人粗大一出一进女人下面视频 | 国产免费女同性视频网站 | 91资源在线视频 | 日本欧美国产精品第一页久久 | 中日韩欧美中文字幕毛片 | 久久精品一区二区三区四区 | 国产午夜精品不卡观看 | 青青草精品在线视频 | 91在线一区二区三区 | 免费福利片 | 制服丝袜中文字幕在线 | 亚洲国产精品久久网午夜 | 久草在线香蕉 | 一级 黄 色 片免费 一级@片 | 91久久香蕉青青草原娱乐 | 99热热热 | 亚洲加勒比久久88色综合 | 黄色大片一级片 | 国产精品视频一区二区三区w | 8050午夜一级全黄毛片 | 免费一级黄色大片 | 欧美激情一区二区三级高清视频 | 妞干网最新 | 欧美日韩综合网 | 欧美成人免费观看 | 午夜a爱| 国产精品亚洲精品一区二区三区 | 国产剧情麻豆精品免费 | 国产欧美日韩综合精品二区 | 欧美亚洲综合一区 | 欧美特级毛片a够爽天狼影院 | 国产精品美女免费视频观看 | 欧美一级片黄色片 | 久久精品综合国产二区 |