Python处理excel数据(以简单案例参考)

Python处理excel数据(以简单案例参考)

感兴趣的小伙伴可根据结果的cvs自行创建文件,跑一跑代码

案例内容

1、搭建环境
2、将csv文件转化为excel文件存储
3、将原excel文件的表中想要提取的内容提取并复制到目标表中
4、从目标表的每行内容中,通过正则匹配获取信息
5、对于重复的内容,去重后计数

实战训练

1、搭建环境
Python 3.8.13
pip install pandas
pip install openpyxl
2、将csv文件转化为excel文件存储
def csv_to_xlsx_pd(new_path):
    csv = pd.read_csv(csv_path, encoding='ANSI')      # encoding: 防止乱码(可通过打开方式——>记事本查看编码方式)
    csv.to_excel(new_path, sheet_name='data')     # sheet_name可自定义
3、将原excel文件的表中想要提取的某行某列的内容进行提取,并复制到目标表中
# 从源excel表中提取信息复制到目标表中
def copy(new_path, sheet_name, new_tab, colu):
    my_excel = openpyxl.load_workbook(new_path)
    src_sheet = my_excel[sheet_name]  # 要复制的表
    dest_sheet = my_excel.create_sheet(new_tab)     # 创建新表
    # dest_sheet = my_excel['omc_ip']
    # 提取某一行某一列的全部数据
    for i in range(1, src_sheet.max_row+1):
        # for j in range(1, src_sheet.max_column+1):
            dest_sheet.cell(row=i, column=colu).value = src_sheet.cell(row=i, column=colu).value
    my_excel.save(new_path)
4、从目标表的某列内容中,通过正则匹配获取信息
# 从excel中正则匹配ip
def get_ip(new_path, sh_name):
    df = pd.read_excel(new_path, sheet_name= sh_name)   # read_excel_path
    contents = list(df['任务名'])
    date = []
    for i in range(0, len(contents)):
        # 循环,提取第i行的内容
        content = contents[i]
        # 正则表达式提取内容关键字
        # results = re.findall(r'\d+\.\d+\.\d+\.\d+', content)    # # IP地址
        results = re.findall(r'\d{11}', content)   # 手机号(此处皆为随机11位数字,具体以实际情况为准)
        try:
            result = results[0]
        except:
            result = ''
        # 关键字增加进行
        date.append(result)
    # 写入行
    df['ip_new'] = date
    df[['ip_new', '任务名']] = df[['任务名', 'ip_new']]   # 两行互换
    df.columns = ['IP', '任务名']  # 变更表头
    # 写入excel结果文件
    df.to_excel(new_path, sheet_name=sh_name, index=False)
5、对于重复的内容,去重,并计数
def remove_count(excel_open_path, new_ex):
    # excel_open_path = r'C:\Users\Desktop\target.xlsx'
    # new_ex = r'C:\Users\Desktop\tar.xlsx'
    xlsx = pd.read_excel(excel_open_path, sheet_name='sheet2')

    all_data = []
    # 读物行的内容
    for i in range(1, len(xlsx) - 1):
        # if i > 8:
        #     break
        data = xlsx.loc[i].values  # 读取前XX行内容
        all_data.append(data[0])
    #
    res = []
    ex_dict = {}
    for j in all_data:
        ex_dict[j] = all_data.count(j)  # IP计数

    # # 去除重复项后计数——>建表
    # # new_ex = r'C:\Users\Desktop\python_测试\bb.xlsx'
    df = pd.DataFrame(list(ex_dict.items()))
    df.columns = ['IP', 'COUNT']
    # 删除缺失值
    df.dropna(inplace=True)
    df.sort_values(by='COUNT', inplace=True, ascending=False)  # 根据COUNT降序
    df.to_excel(new_ex, index=False)
# remove_count(r'C:\Users\Desktop\target.xlsx')
6、运行代码
if __name__ == '__main__':
    new_path = r'C:\Users\Desktop\target.xlsx'
    last_path = r'C:\Users\Desktop\tar.xlsx'
    csv_to_xlsx_pd(new_path)    # csv转化为xlsx
    copy(new_path, 'data', 'sheet1', 1)    # 复制第一列多行内容到目标表中:'data'来自转化后表名
    get_ip(new_path, 'sheet1')   # 获取每行中待匹配的信息
    copy(new_path, 'sheet1', 'sheet2', 1)
    remove_count(r'C:\Users\Desktop\target.xlsx', r'C:\Users\Desktop\tar.xlsx')

案例结果展示

1、csv文件内容
在这里插入图片描述
2、最终结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值