Python使用 pandas操作Excel文件并新增列数据

业务实现:对于原先的excel文件,我需要新增一个数据列,不同情况,列数据的值不同,分别为空白行、已爬取、已改名、爬取异常、改名未知异常

python 复制代码
# -*- coding: utf-8 -*-
import io
import os
import re
import sys

import numpy as np
import pandas as pd
import pandas.io.formats.excel
pandas.io.formats.excel.ExcelFormatter.header_style = None  # 表头不加粗

reload(sys)
sys.setdefaultencoding('utf-8')

def change_data(data):
    try:
        data = data.replace(' ', '')  # 删除空格
        data = re.sub(r'\([^)]*\)', '', data)  # 删除括号以及内容
        data = re.sub(r'\*', '', data)  # 删除*号
        return data
    except Exception:
        pass

# 文件夹名称
dir_name_set = set()
for item in os.listdir(unicode(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'country'), 'utf-8')):
    item = change_data(item)
    dir_name_set.add(item)

# 改名字典
spacial_name_dict = {}
with io.open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'spacial_country.txt'), 'r', encoding='utf-8') as f:
    lines = f.readlines()
    for line in lines:
        line_split = line.strip().split(' ')
        name1 = change_data(line_split[0])
        if '/' in name1:
            name1 = name1.split('/')[0]
        name2 = change_data(line_split[1])
        if '/' in name2:
            name2 = name2.split('/')[0]
        spacial_name_dict[name1] = name2

filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'country.xlsx')
sheet_name='species_data'
df = pd.read_excel(filename, sheet_name=sheet_name)
dfc = df.copy()
idx = 1

# 处理每一行数据
for index, row in dfc.iterrows():  # 返回每一行的索引和对应的行数据
    name = row['name']
    try:
        if isinstance(name, float) and np.isnan(name):
            dfc.loc[index, 'status'] = '空白行'
        else:
            name = change_data(name)
            if name in dir_name_set:
                dfc.loc[index, 'status'] = '已爬取'
            elif name in spacial_name_dict.keys():
                if spacial_name_dict[name] in dir_name_set:
                    dfc.loc[index, 'status'] = '已改名为{}'.format(spacial_name_dict[name])
                else:
                    dfc.loc[index, 'status'] = '改名未知异常'
            else:
                dfc.loc[index, 'status'] = '爬取异常'
        if (index != 0 and index % 10000 == 0) or index == len(dfc) - 1:
            print index, idx
            if idx == 15:
                dfcc = dfc.copy()
                output_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'country_{}.xlsx'.format(idx))
                print 'output_path', output_path
                dfcc.to_excel(output_path, sheet_name=sheet_name, index=False, header=True)
            idx += 1
    except Exception as e:
        print name, e
相关推荐
biter down21 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
肖永威1 天前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks1 天前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
不知名的老吴1 天前
线程的生命周期之线程“插队“
java·开发语言·python
xsc6996751 天前
从零搭建大模型与智能体平台 - 完整技术详解
python
无风听海1 天前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
CTA终结者1 天前
期货量化主力换月程序怎么移仓:天勤 underlying_symbol 与任务切换
python·区块链
马士兵教育1 天前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
KaMeidebaby1 天前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6181 天前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法