找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 6829|回复: 8

[求助] 用python处理excel中的一些需求,请赐教

1

主题

4

帖子

4

积分

贫民

积分
4
叶流云 发表于 2017-2-23 16:25:45 | 显示全部楼层 |阅读模式
最近才开始学习python,要完成我自己的需求还需要太多的时间,目前每天都处理这些文件,所以希望大神能帮忙写一个,我也可以看代码学习,先谢过了。
我的需求是对excel文件进行处理,增加四列,并进行统计
一,时间这列
把AR列取前10个字符就可以了。
二,类型这列
这列最复杂,按照J列中含有的关键词返回类型,有先后顺序优先级分别是  1,同时含“新装”和“续包”,返回结果“裸宽”;2,含“升”,返回结果“提速

”;3,含“融合”,返回结果“融合”;4,含“续”,返回结果“续包”;5,含“新装”,返回结果“新装”;6,以上关键词都不含,返回结果“其他”;
三,带宽这列
按照K列搜索关键词,关键词分别为“20M”、“50M”、“100M”,返回就可以了,如果都不含关键词返回“其他”。
四,合约期这列
按照K列搜索关键词,关键词分别为“12个月”、“24个月”,返回就可以了,如果都不含关键词返回“其他”。

原excel文件中,就含title0一个表格;新产生的excel中希望有三个sheet,sheet1新增以上这四列,sheet2按照“归属地市”和“类型”进行统计;sheet3按

照“支付日期”和“类型”进行统计;

这个流程太麻烦,希望大家不吝赐教,也给其他朋友练手。


python处理excel实现效果.xls

1.08 MB, 下载次数: 23

python处理excel实现效果.py

296 Bytes, 下载次数: 20

回复

使用道具 举报

0

主题

14

帖子

14

积分

贫民

积分
14
昨夜星辰 发表于 2017-2-23 18:01:45 | 显示全部楼层
本帖最后由 昨夜星辰 于 2017-2-23 18:07 编辑

你自己研究到什么程度啦?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
叶流云  楼主| 发表于 2017-2-27 11:11:57 | 显示全部楼层
昨夜星辰 发表于 2017-2-23 18:01
你自己研究到什么程度啦?

刚刚开始,目前就想先解决这个问题
回复 支持 反对

使用道具 举报

0

主题

14

帖子

14

积分

贫民

积分
14
昨夜星辰 发表于 2017-2-28 10:53:35 | 显示全部楼层
我用的是python3,用来处理excel的第三方库是openpyxl,先奉上源文件(1.xlsx)和目标文件(2.xlsx)。
代码如下:
  1. import re
  2. from openpyxl import load_workbook

  3. def add_sheet(sheet_name, title_list, data_dict):
  4.     wb.create_sheet(sheet_name)
  5.     ws = wb[sheet_name]
  6.     ws.append(title_list)
  7.     ln = 1
  8.     for k1, v1 in data_dict.items():
  9.         ln += 1
  10.         ws.cell(row=ln, column=1, value=k1)
  11.         for k2, v2 in v1.items():
  12.             ws.cell(row=ln, column=title_list.index(k2) + 1, value=v2)
  13.         ws.cell(row=ln, column=len(title_list), value=sum(v1.values()))
  14.     ws['A%d' % (ln + 1)] = '合计'
  15.     for k, v in type_dict.items():
  16.         ws.cell(row=ln + 1, column=title_list.index(k) + 1, value=v)
  17.     ws.cell(row=ln + 1, column=len(title_list), value=sum(type_dict.values()))
  18. wb = load_workbook('1.xlsx')
  19. wb.copy_worksheet(wb['title0'])
  20. ws = wb['title0 Copy']
  21. ws.title = 'Sheet1'
  22. new_title_list = ['支付日期', '类型', '带宽', '合约期']
  23. for new_title in new_title_list:
  24.     ws.cell(row=1, column=ws.max_column+1, value=new_title)
  25. type_dict, city_type_dict, date_type_dict = {}, {}, {}
  26. for row in ws.iter_rows(min_row=2):
  27.     row[-4].value = row[-5].value[:10]
  28.     name = row[9].value
  29.     if '新装' in name and '续包' in name:
  30.         val = '裸宽'
  31.     elif '升' in name:
  32.         val = '提速'
  33.     elif '融合' in name:
  34.         val = '融合'
  35.     elif '续' in name:
  36.         val = '续包'
  37.     elif '新装' in name:
  38.         val = '新装'
  39.     else:
  40.         val = '其他'
  41.     row[-3].value = val
  42.     type_dict[val] = type_dict[val] + 1 if type_dict.get(val) else 1
  43.     city = row[17].value
  44.     if city_type_dict.get(city):
  45.         if city_type_dict[city].get(val):
  46.             city_type_dict[city][val] += 1
  47.         else:
  48.             city_type_dict[city][val] = 1
  49.     else:
  50.         city_type_dict[city] = {}
  51.         city_type_dict[city][val] = 1
  52.     date = row[-4].value
  53.     if date_type_dict.get(date):
  54.         if date_type_dict[date].get(val):
  55.             date_type_dict[date][val] += 1
  56.         else:
  57.             date_type_dict[date][val] = 1
  58.     else:
  59.         date_type_dict[date] = {}
  60.         date_type_dict[date][val] = 1
  61.     row[-3].value = val
  62.     info = row[10].value
  63.     row[-2].value = re.search(r'\d+M', info).group() if re.search(r'\d+M', info) else '其他'
  64.     row[-1].value = re.search(r'\d+个月', info).group() if re.search(r'\d+个月', info) else '其他'
  65. title_list = ['归属城市', '裸宽', '其他', '融合', '提速', '新装', '续包', '合计']
  66. add_sheet('Sheet2', title_list, city_type_dict)
  67. title_list[0] = '支付日期'
  68. add_sheet('Sheet3', title_list, date_type_dict)
  69. wb.save('2.xlsx')
复制代码

1.xlsx

125.06 KB, 下载次数: 9

2.xlsx

188.65 KB, 下载次数: 10

回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
叶流云  楼主| 发表于 2017-3-1 12:41:02 | 显示全部楼层
昨夜星辰 发表于 2017-2-28 10:53
我用的是python3,用来处理excel的第三方库是openpyxl,先奉上源文件(1.xlsx)和目标文件(2.xlsx)。
代 ...

亲,你这个运行有什么要求吗?我这边运行结果是这样的
回复 支持 反对

使用道具 举报

0

主题

14

帖子

14

积分

贫民

积分
14
昨夜星辰 发表于 2017-3-1 14:12:24 | 显示全部楼层
叶流云 发表于 2017-3-1 12:41
亲,你这个运行有什么要求吗?我这边运行结果是这样的

你要把你那个excel文件的文件名改成1.xlsx,如果是.xls的得先转化成.xlsx,或者将脚本里的1.xlsx改成你实际的文件名。
回复 支持 反对

使用道具 举报

0

主题

33

帖子

33

积分

贫民

积分
33
jackyspy 发表于 2017-3-2 14:06:44 | 显示全部楼层
楼主是移动网厅的?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
叶流云  楼主| 发表于 2017-3-6 17:51:20 | 显示全部楼层
jackyspy 发表于 2017-3-2 14:06
楼主是移动网厅的?

呵呵,移动的电子商务
回复 支持 反对

使用道具 举报

0

主题

33

帖子

33

积分

贫民

积分
33
jackyspy 发表于 2017-3-6 19:37:43 | 显示全部楼层
呵呵,就瞅着眼熟
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表