如何在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
相关产品推荐
相关产品推荐

