近期和朋友小A聊天的时候,总是听小A说工作越来越烦,有大量的Excel表格需要分析整理 ~~~,需要总结各种数据,做统计汇总之类,@#¥%%~~。像我等懒人,是不能容忍做大量重复性工作的。以懒人的观点来看,凡重复性的,必定有其规律啊,像太阳东升西落,像季节四季更替。只要有规律可循,就可以用工具来自动分析。能让机器做的事情,人就可以解放一下了嘛,就有更多的时间享受工作和生活了,吼吼吼

出于对小A的同情,我决定写一个工具,来自动解析这“大量”的Excel表格(详谈后才知道,其实小A说的大量,也就几个上千行的表格而已)。这里记录下一些Pandas对Excel的操作过程,供自己和码友们交流,共同提高、不断改进。

环境:Python3.6 + Pandas(0.22)

有一个1000行,28列的表格,包含了公司每个项目的各种信息(项目ID,名称,开始时间,状态,结束时间,报价,税率……)。这么多列,看了确实头晕??@_@??。这里我做了一个简单的表格,来说明一下Pandas是如何读取、筛选Excel的。

import pandas as pdexcelFile = r'TEMP.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
print(df)

读取信息到DataFrame里面就这么简单,只需要提供一个excel的名称就好了,当然默认的Sheet名称是Sheet1。我们可以指定读取Sheet的名称的。且看 read_excel 的定义。

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

这里不做过多说明,详细参数说明官方网站 http://pandas.pydata.org/pandas-docs/version/0.22/api.html。

print(df) 读取到的信息如下,是不是很简单(向Pandas开发团队致敬):

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

需求一:我们只想要 Project Name、Status、Offer、Tax Rate、PM   这几列的信息:
import pandas as pdexcelFile = r'TEMP.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
df1= df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
print(df1)

需求二:我们只想要 统计 Bob 的项目
import pandas as pdexcelFile = r'TEMP.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
df1 = df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
df2 = df1.loc[df1['PM'] == 'Bob']
print(df2)


我们只想要 统计 Bob 的,Status为Completed的项目

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


需求三:
来统计PM各自的项目信息。

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

import pandas as pdexcelFile = r'TEMP.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
df1 = df[['Project Name', 'Status', 'Offer', 'Tax Rate', 'PM']]
df2 = df1.loc[df1['PM'] == 'Bob'].loc[df1['Status'] == 'Completed']#获取PM列的值
pmList = df1[['PM']].values.T.tolist()[:][0]
print(pmList)#排除重复值
pmList = list(set(pmList))
print(pmList)for pm in pmList:dfByPM = df1.loc[df1['PM'] == pm]print('\r\n')print(dfByPM)

结果如下:

pandas 是不是很强大,我们只需要很少的代码,就可以读取和查询excel的几乎所有内容。

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

需求四:

来统计每位PM所有Offer列的总和。

import pandas as pdexcelFile = r'TEMP.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))# 获取PM列的值
pmList = df[['PM']].values.T.tolist()[:][0]
print(pmList)# 排除重复值
pmList = list(set(pmList))
print(pmList)sum_list = [['PM', 'Offer']]
for pm in pmList:temp = []dfByPM = df.loc[df['PM'] == pm]temp.append(pm)for col in dfByPM.columns:if col == 'Offer':sumValue = dfByPM[col].sum() #计数指定列的和temp.append(sumValue)sum_list.append(temp)print(sum_list)

运行结果如下:

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

需求五:

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

pandas.DataFrame.to_excel

这是一个特别惹人爱的函数,由dataframe对象直接调用,然后指定文件名、表名等各种参数。函数定义如下:

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.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html#pandas.DataFrame.to_excel

思路:我们先把一个二维列表转换成dataframe对象,然后再调用这个pandas.DataFrame.to_excel函数

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

运行后就会在filePath下面发现新生成的文件。

对excel的查询再存储就简单记录到这里,后续说说修改Excel的样式在现存excel里面添加内容

在Python中使用Pandas.DataFrame对Excel操作笔记一 - 从Excel里面获取说需要的信息相关推荐

  1. python报表自动化系列 - python中索引pandas.DataFrame的内容

    索引DataFrame的内容 李俊才 邮箱:291148484@163.com Ⅰ.按数字索引,返回内容 [函数说明] 函数一个有三个形参,df表示传入的一个提供内容的DataFrame变量,(r,c ...

  2. python中stacked_python pandas dataframe for stacked=false的重叠透明区域的自定义图例?

    当用pandas dataframe.plot生成未堆叠的区域图时,可以得到比图例条目的数目更多的彩色表面.在 考虑:import pandas as pd import numpy as np df ...

  3. python中head_Python pandas.DataFrame.head函数方法的使用

    DataFrame.head(self, n=5) [source] 返回前n行. 此函数根据位置返回对象的前n行.这对于快速测试对象中的数据类型是否正确非常有用. 参数:n :int,默认5 要选择 ...

  4. python中fillna_Python pandas.DataFrame.fillna函数方法的使用

    DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, ...

  5. python中unstack_Python pandas.DataFrame.unstack函数方法的使用

    DataFrame.unstack(level=-1, fill_value=None)[source] Pivot(必要的分层)索引标签的一个级别. 返回具有列标签新级别的DataFrame,其最内 ...

  6. python对excel某一列去重-python中怎么对dataframe列去重

    python中对已经生成的Series,怎样组合成DataFrame 如 a = Series([1,2,3]) b = Series([2,3,4]) 怎样将a b组合成一个DataFzip函数接受 ...

  7. python3 readexcel pandas问题,使用python中的pandas中的read_excel函数将日期保留为字符串...

    Python 2.7.10 Tried pandas 0.17.1 -- function read_excel Tried pyexcel 0.1.7 + pyexcel-xlsx 0.0.7 -- ...

  8. python 去除panda安装包_沉淀,再出发:python中的pandas包

    沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...

  9. 【科学文献计量】将Endnote中的文献读入python中进行数据分析,并顺便将结果保存为Excel文件,并封装函数直接调用

    将Endnote中的文献读入python中进行数据分析,并顺便将结果保存为Excel文件 1 需求 2 功能完成 2.1 文献下载 2.2 文献导入到Endnote 2.3 文献导出 2.4 文件加载 ...

最新文章

  1. IDEA工具基本设置
  2. extjs store 复杂json_extjs 2.3 修复 jsonstore 嵌套多级引用数据NULL的BUG
  3. 推荐:.Net 5开源免费的内容管理系统
  4. linux select函数用法
  5. lua State加载部分库
  6. 若后台的Activity被系统回收...
  7. sofia-sip-ua >= 1.12.12… configure: error: no usable sofia-sip; please install sofia-sip-ua devel pa
  8. 2020CID|阿里云韩伟东:云原生底层系统思考
  9. spss——主成分分析详解
  10. 移动开发的设计稿为什么大多数是750px?
  11. BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡
  12. python算法习题(一): 排列组合
  13. Android设备使用libusb和usb声卡
  14. VirtualDesktop提示Oculus servers unreachable
  15. matlab中函数的定义和使用
  16. android 之电话监听
  17. 视频号带货玩法拆解,无私分享给有需要的你「视频教程」
  18. 易语言 html对象,易语言ExceL对象 内容格式使用方法附源代码
  19. 少儿编程老师在机器人教育中的前景
  20. opencv 三通道图像转四通道透明图像

热门文章

  1. Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程
  2. 进程、lwp(轻量级进程)和Java线程的理解
  3. RMAN-06817: Pluggable Database CHARLESPDB cannot be backed up in NOARCHIVELOG mode.
  4. php csv文件转json,php csv如何转json
  5. 【2018年11月12日】其他化学制品行业的股票估值
  6. QT 简单五子棋实现
  7. 最基础硬件学习 | 简单闪烁灯制作
  8. 51单片机------闪烁灯(实验报告)
  9. XtraReport控件详细属性说明
  10. 弗洛伊德求最小简单环