如何用Python将CSV中字符串列批量转换为对应数值列?
处理CSV字符串列转数值的高效方法
对于处理大型CSV文件,pandas是最简便高效的选择,比手动用字典循环处理快得多,尤其适合数据量较大的场景。以下是具体实现步骤:
先安装pandas(未安装的话):
pip install pandas核心代码示例:
import pandas as pd # 读取大型CSV,若文件超大可加chunksize参数分块处理 df = pd.read_csv('your_factory_data.csv') # 自动将Factories列的唯一字符串映射为递增数值,默认从0开始 df['NumValues'], factory_to_num = pd.factorize(df['Factories']) # 若需要数值从1开始(和你的示例一致),直接加1即可 df['NumValues'] += 1 # 保存处理后的文件 df.to_csv('processed_factory_data.csv', index=False)
为什么这个方法更优?
- 无需手动构建字典:
factorize会自动识别所有唯一的工厂名称,省去逐个添加键值对的麻烦 - 效率极高:基于numpy的向量化操作,比Python循环遍历字典快几个数量级,适合大型数据集
- 可追溯映射关系:返回的
factory_to_num是一个数组,能查看每个工厂对应的数值(比如factory_to_num[0]对应数值1,以此类推)
如果需要自定义特定工厂的数值(比如不是按出现顺序递增),也可以用replace方法结合自动生成的字典:
# 先获取唯一工厂列表,手动指定映射(示例) factory_map = {name: idx+1 for idx, name in enumerate(df['Factories'].unique())} # 这里可以修改factory_map里的数值,比如把FactoryC设为5 factory_map['FactoryC'] = 5 # 替换列值 df['NumValues'] = df['Factories'].replace(factory_map)
内容的提问来源于stack exchange,提问作者random123
相关产品推荐
相关产品推荐

