4月29日

import pandas as pd
import re

# 读取CSV文件
df = pd.read_csv('cg_天津科技成果.csv', encoding='utf-8')


# 数据清洗函数
def clean_data(df):
    # 1. 处理缺失值
    df = df.fillna('')

    # 2. 去除字符串中的多余空格和换行符
    for col in df.columns:
        if df[col].dtype == object:
            df[col] = df[col].apply(lambda x: re.sub(r'\s+', ' ', str(x)).strip())

    # 3. 处理"项目总规模或评估价值(万元)"列,提取数字
    def extract_value(x):
        match = re.search(r'\d+\.?\d*', str(x))
        return match.group(0) if match else '0'

    df['项目总规模或评估价值(万元)'] = df['项目总规模或评估价值(万元)'].apply(extract_value)

    # 4. 标准化"技术水平"列
    tech_levels = {
        '国际领先': '国际领先',
        '国际先进': '国际先进',
        '国内领先': '国内领先',
        '国内先进': '国内先进',
        '其他': '其他',
        '': '未评价'
    }
    df['技术水平'] = df['技术水平'].map(tech_levels).fillna('未评价')

    # 5. 处理"知识产权情况"列,提取专利信息
    def extract_patent_info(text):
        if '专利授权号' in text:
            patent_type = re.search(r'知识产权名称:(.*?)专利授权号', text)
            patent_type = patent_type.group(1).strip() if patent_type else ''
            patent_num = re.search(r'专利授权号:(.*?)(?:\s|,|$)', text)
            patent_num = patent_num.group(1).strip() if patent_num else ''
            return f"{patent_type}({patent_num})"
        return text

    df['知识产权情况'] = df['知识产权情况'].apply(extract_patent_info)

    # 6. 处理"目前所处阶段"列,标准化阶段名称
    stages = {
        '初期阶段': '研发初期',
        '中期阶段': '研发中期',
        '成熟应用阶段': '成熟应用',
        '': '未说明'
    }
    df['目前所处阶段'] = df['目前所处阶段'].map(stages).fillna('未说明')

    # 7. 处理"所属技术领域"列,标准化领域名称
    fields = {
        '先进制造与自动化': '先进制造',
        '现代农业': '农业',
        '资源与环境': '资源环境',
        '材料与化工': '材料化工',
        '生物与医药': '生物医药',
        '电子信息': '电子信息',
        '能源与交通': '能源交通',
        '': '其他'
    }
    df['所属技术领域'] = df['所属技术领域'].map(fields).fillna('其他')

    # 8. 处理数值型字段,确保为数字类型
    numeric_cols = ['项目总规模或评估价值(万元)']
    for col in numeric_cols:
        df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)

    return df


# 执行数据清洗
cleaned_df = clean_data(df)

# 保存清洗后的数据
cleaned_df.to_csv('cleaned_天津科技成果.csv', index=False, encoding='utf-8-sig')

print("数据清洗完成,已保存为 cleaned_天津科技成果.csv")

 

posted @ 2025-04-30 12:12  KuanDong24  阅读(17)  评论(0)    收藏  举报