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

如何在pandas read_csv中实现依赖其他列的列转换?

解决方法:无法通过read_csv的converters实现,需读取后处理

很遗憾,用pandas的read_csv里的converters参数没法直接实现你要的效果——因为converters中的转换函数只能获取当前列的单个元素值,完全没办法访问同一行里其他列的数据。所以你必须先把整个CSV文件读取到DataFrame中,之后再基于多列的计算生成success列。

这里给你两种具体的实现方案,都能得到你想要的输出:

方案1:利用矢量化操作(推荐,效率更高)

矢量化操作是pandas的优势,处理大数据量时比逐行处理快很多:

import pandas as pd

# 读取CSV,原文件第一行是表头,直接读取即可
df = pd.read_csv('file.csv')

# 计算success列:total * (percentage去掉%转数值 / 100),最后转成整数
df['success'] = df['total'] * df['percentage'].str.replace('%', '').astype(float) / 100
df['success'] = df['success'].astype(int)

# 调整列顺序并保留需要的列
df = df[['date', 'total', 'success']]

print(df)

方案2:逐行处理(更直观,适合逻辑复杂的场景)

如果你的转换逻辑更复杂,可以用apply逐行处理每一行的数据:

import pandas as pd

df = pd.read_csv('file.csv')

# 用lambda函数逐行访问total和percentage,计算success
df['success'] = df.apply(
    lambda row: int(row['total'] * float(row['percentage'].replace('%', '')) / 100),
    axis=1  # axis=1表示按行处理
)

# 整理列
df = df[['date', 'total', 'success']]

print(df)

补充说明

你原来代码里的日期转换可以保留,在读取时用parse_dates参数更方便:

df = pd.read_csv('file.csv', parse_dates=['date'])

这样date列会直接被转换成datetime类型,不用单独写converters。

内容的提问来源于stack exchange,提问作者maslak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:15:18