You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python为指定CSV文件生成新字段的技术咨询

没问题!我来帮你搞定用Python给这个CSV文件添加新字段的需求。先看看你提供的原始CSV结构:

movieId;title;genres
1;Toy Story (1995);Adventure|Animation|Children|Comedy|Fantasy
2;Jumanji (1995);Adventure|Children|Fantasy
3;Grumpier Old Men (1995);Comedy|Romance
4;Waiting to Exhale (1995);Comedy|Drama|Romance
5;Father of the Bride Part II (1995);Comedy
6;Heat (1995);Action|Crime|Thriller
7;Sabrina (1995);Comedy|Romance
8;Tom and Huck (1995);Adventure|Children
9;Hate (Haine, La) (1995);Crime|Drama
10;Seven (a.k.a. Se7en) (1995);Mystery|Thriller

下面我提供两种常用方案,你可以根据自己的环境和需求选择:


方案一:使用Pandas处理(推荐,简洁高效)

Pandas是处理CSV这类表格数据的神器,代码量少且易读。首先确保你已经安装了pandas:

pip install pandas

然后编写处理代码:

import pandas as pd

# 读取分号分隔的CSV文件
df = pd.read_csv('movies.csv', sep=';')

# 1. 提取电影年份作为新字段 `release_year`
# 通过正则匹配标题里括号中的四位数字
df['release_year'] = df['title'].str.extract(r'\((\d{4})\)', expand=False)

# 2. 拆分genres为列表格式的新字段 `genre_list`
df['genre_list'] = df['genres'].str.split('|')

# 3. 添加布尔字段 `is_comedy`,标记影片是否属于喜剧类型
df['is_comedy'] = df['genres'].str.contains('Comedy', case=False)

# 4. 自定义:统计影片的类型数量 `genre_count`
df['genre_count'] = df['genre_list'].apply(len)

# 将处理后的数据保存为新的CSV文件(保持分号分隔)
df.to_csv('movies_with_new_fields.csv', sep=';', index=False)

# 打印前5行预览效果
print(df.head())

运行后你会得到包含新字段的CSV,比如release_year提取出了1995,is_comedy会显示True/False,非常直观。


方案二:使用Python标准库csv处理(无需额外依赖)

如果你不想安装第三方库,用Python内置的csv模块也能实现同样的功能:

import csv
import re

# 打开原始文件和输出文件
with open('movies.csv', 'r', encoding='utf-8') as infile, open('movies_with_new_fields.csv', 'w', newline='', encoding='utf-8') as outfile:
    # 按分号分隔读取数据为字典格式
    reader = csv.DictReader(infile, delimiter=';')
    # 定义新的字段列表,在原有字段基础上添加新字段
    fieldnames = reader.fieldnames + ['release_year', 'genre_list', 'is_comedy', 'genre_count']
    writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter=';')
    
    # 写入表头
    writer.writeheader()
    
    # 逐行处理数据
    for row in reader:
        # 提取年份:匹配标题中的四位数字年份
        year_match = re.search(r'\((\d{4})\)', row['title'])
        row['release_year'] = year_match.group(1) if year_match else None
        
        # 拆分类型为逗号分隔的字符串(CSV中存储列表不太友好,用逗号替代竖线)
        genre_list = row['genres'].split('|')
        row['genre_list'] = ', '.join(genre_list)
        
        # 标记是否为喜剧
        row['is_comedy'] = 'True' if 'Comedy' in genre_list else 'False'
        
        # 统计类型数量
        row['genre_count'] = str(len(genre_list))
        
        # 写入处理后的行
        writer.writerow(row)

这个方案不需要安装任何额外包,适合环境受限的场景。


自定义扩展提示

你可以根据自己的需求修改新字段逻辑,比如:

  • 提取电影原名(去掉年份和括号):df['movie_name'] = df['title'].str.replace(r'\s*\(\d{4}\)', '', regex=True)
  • 添加is_action字段标记动作片:df['is_action'] = df['genres'].str.contains('Action')
  • 合并多个类型为自定义分类,比如把包含Children的标记为family_friendly

内容的提问来源于stack exchange,提问作者P.ru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:10:05