一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在Python中使用Pandas.DataFrame對Excel操作筆記一

 comeonwyj 2018-12-02

近期和朋友小A聊天的時候,總是聽小A說工作越來越煩,有大量的Excel表格需要分析整理 ~~~,需要總結(jié)各種數(shù)據(jù),做統(tǒng)計匯總之類,@#¥%%~~。像我等懶人,是不能容忍做大量重復性工作的。以懶人的觀點來看,凡重復性的,必定有其規(guī)律啊,像太陽東升西落,像季節(jié)四季更替。只要有規(guī)律可循,就可以用工具來自動分析。能讓機器做的事情,人就可以解放一下了嘛,就有更多的時間享受工作和生活了,吼吼吼微笑。

出于對小A的同情,我決定寫一個工具,來自動解析這“大量”的Excel表格(詳談后才知道,其實小A說的大量,也就幾個上千行的表格而已)。這里記錄下一些Pandas對Excel的操作過程,供自己和碼友們交流,共同提高、不斷改進。

環(huán)境:Python3.6 + Pandas(0.22)

有一個1000行,28列的表格,包含了公司每個項目的各種信息(項目ID,名稱,開始時間,狀態(tài),結(jié)束時間,報價,稅率……)。這么多列,看了確實頭暈??@_@??。這里我做了一個簡單的表格,來說明一下Pandas是如何讀取、篩選Excel的。

 

 

 

 
  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. print(df)


讀取信息到DataFrame里面就這么簡單,只需要提供一個excel的名稱就好了,當然默認的Sheet名稱是Sheet1。我們可以指定讀取Sheet的名稱的。且看 read_excel 的定義。

 

  1. def read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0,
  2. index_col=None, names=None, usecols=None, parse_dates=False,
  3. date_parser=None, na_values=None, thousands=None,
  4. convert_float=True, converters=None, dtype=None,
  5. true_values=None, false_values=None, engine=None,
  6. squeeze=False, **kwds):

這里不做過多說明,詳細參數(shù)說明官方網(wǎng)站 http://pandas./pandas-docs/version/0.22/api.html。

print(df) 讀取到的信息如下,是不是很簡單(向Pandas開發(fā)團隊致敬):

   Project ID    Project Name Start Time      Status    Offer  Tax Rate    PM
0      #10001  Microsoft_XXXX 2018-01-01   Completed  1000000     0.060   Bob
1      #10002      Adobe_XXXX 2018-01-02  Processing   105500     0.065   TOM
2      #10003     VMVare_XXXX 2018-01-03  Processing   280000     0.070  Kate
3      #10004      Intel_XXXX 2018-01-04  Processing   520000     0.060  Jone
4      #10005         HP_XXXX 2018-01-05     Pending   600000     0.060   Bob
5      #10006     Lenovo_XXXX 2018-01-06   Completed   980000     0.080  Jone
6      #10007       DELL_XXXX 2018-01-07  Processing   620000     0.060  Kate
7      #10008        ALI_XXXX 2018-01-08  Processing   100000     0.060   Bob
8      #10009      Apple_XXXX 2018-01-09     Pending    80000     0.090   Ken
9      #10010     Google_XXXX 2018-01-10   Completed   610000     0.060   Ken
10     #10011     Amazon_XXXX 2018-01-11     Pending    92000     0.125   Ken

 

  1. 需求一:
  2. 我們只想要 Project Name、Status、Offer、Tax Rate、PM   這幾列的信息:

 

  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. df1= df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
  5. print(df1)

 

 

  1. 需求二:
  2. 我們只想要 統(tǒng)計 Bob 的項目

 

 

  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. df1 = df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
  5. df2 = df1.loc[df1['PM'] == 'Bob']
  6. print(df2)


我們只想要 統(tǒng)計 Bob 的,Status為Completed的項目

 

  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. df1 = df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
  5. df2 = df1.loc[df1['PM'] == 'Bob'].loc[df1['Status'] == 'Completed']
  6. print(df2)


需求三:
來統(tǒng)計PM各自的項目信息。

分析:首先我們要知道都有哪些PM,這在表的PM列里面有。

 

  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. df1 = df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
  5. df2 = df1.loc[df1['PM'] == 'Bob'].loc[df1['Status'] == 'Completed']
  6. #獲取PM列的值
  7. pmList = df1[['PM']].values.T.tolist()[:][0]
  8. print(pmList)
  9. #排除重復值
  10. pmList = list(set(pmList))
  11. print(pmList)
  12. for pm in pmList:
  13. dfByPM = df1.loc[df1['PM'] == pm]
  14. print('\r\n')
  15. print(dfByPM)

結(jié)果如下:

pandas 是不是很強大,我們只需要很少的代碼,就可以讀取和查詢excel的幾乎所有內(nèi)容。

 

 

~~~~~2018/05/29 更新 ~~~~~~~

需求四:

 

 

 

來統(tǒng)計每位PM所有Offer列的總和。

 

  1. import pandas as pd
  2. excelFile = r'TEMP.xlsx'
  3. df = pd.DataFrame(pd.read_excel(excelFile))
  4. # 獲取PM列的值
  5. pmList = df[['PM']].values.T.tolist()[:][0]
  6. print(pmList)
  7. # 排除重復值
  8. pmList = list(set(pmList))
  9. print(pmList)
  10. sum_list = [['PM', 'Offer']]
  11. for pm in pmList:
  12. temp = []
  13. dfByPM = df.loc[df['PM'] == pm]
  14. temp.append(pm)
  15. for col in dfByPM.columns:
  16. if col == 'Offer':
  17. sumValue = dfByPM[col].sum() #計數(shù)指定列的和
  18. temp.append(sumValue)
  19. sum_list.append(temp)
  20. print(sum_list)

運行結(jié)果如下:

[['PM', 'Offer'], ['Ken', 782000], ['Kate', 900000], ['Bob', 1700000], ['TOM', 105500], ['Jone', 1500000]]

需求五:

如何把這些信息寫入到Excel里面呢?且往下看……

 

pandas.DataFrame.to_excel

這是一個特別惹人愛的函數(shù),由dataframe對象直接調(diào)用,然后指定文件名、表名等各種參數(shù)。函數(shù)定義如下:

 

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

 

更詳細的說明可以看這里:

 

http://pandas./pandas-docs/stable/generated/pandas.DataFrame.to_excel.html#pandas.DataFrame.to_excel

思路:我們先把一個二維列表轉(zhuǎn)換成dataframe對象,然后再調(diào)用這個pandas.DataFrame.to_excel函數(shù)

  1. summaryDataFrame = pd.DataFrame(sum_list)
  2. summaryDataFrame.to_excel(filePath, encoding='utf-8', index=False, header=False)
filePath, encoding='utf-8', index=False, header=False)

運行后就會在filePath下面發(fā)現(xiàn)新生成的文件。

對excel的查詢再存儲就簡單記錄到這里,后續(xù)說說修改Excel的樣式在現(xiàn)存excel里面添加內(nèi)容

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    无套内射美女视频免费在线观看| 风间中文字幕亚洲一区| 欧美精品女同一区二区| 欧美一区二区黑人在线| 青青久久亚洲婷婷中文网| 欧美午夜视频免费观看| 日本欧美在线一区二区三区| 自拍偷女厕所拍偷区亚洲综合| 麻豆最新出品国产精品| 国产成人精品在线一区二区三区| 中文字幕亚洲人妻在线视频| 日韩精品视频香蕉视频| 欧美成人免费夜夜黄啪啪 | 欧美日韩亚洲精品在线观看| 91亚洲人人在字幕国产| 亚洲另类欧美综合日韩精品| 国产精品免费视频视频| 91精品视频免费播放| 在线免费视频你懂的观看| 深夜福利亚洲高清性感| 中文精品人妻一区二区| 日韩一区二区三区久久| 麻豆视频传媒入口在线看| 麻豆视频传媒入口在线看| 女人精品内射国产99| 日韩成人高清免费在线| 久久中文字幕中文字幕中文| 国产在线成人免费高清观看av| 成人国产激情福利久久| 日韩欧美黄色一级视频| 亚洲妇女黄色三级视频| 欧美日韩国产免费看黄片| 亚洲第一区二区三区女厕偷拍| 欧美日韩亚洲综合国产人| 日韩国产欧美中文字幕| 日本东京热加勒比一区二区| 国产熟女一区二区三区四区| 国产精品成人一区二区在线| 三级高清有码在线观看| 亚洲中文字幕乱码亚洲| 91蜜臀精品一区二区三区|