如何将CSV文件中的指定字符串列拆分为三列
嘿,我懂你这种找不到合适方案的纠结!处理大型CSV里的固定格式列拆分其实没那么复杂,给你两个实用的方案,不管你习惯写代码还是用Excel都能搞定:
方案一:用Python Pandas处理(适合超大型文件)
Pandas对大文件的处理效率很高,还支持分块读取,不会因为文件太大卡壳。步骤如下:
- 首先安装pandas(如果还没装的话):
pip install pandas - 然后用下面的代码处理:
import pandas as pd # 读取原始CSV文件,iloc[:,2]代表第三列(Python索引从0开始) df = pd.read_csv('你的原始CSV文件名.csv') # 第一步:按斜杠/拆分第三列,得到两部分 df[['拆分后列1', '临时列']] = df.iloc[:, 2].str.split('/', expand=True) # 第二步:把临时列拆成数字部分和字母开头的部分,用正则匹配 df[['拆分后列2', '拆分后列3']] = df['临时列'].str.extract(r'(\d+)([A-Za-z].*)', expand=True) # 按需删除不需要的列(原第三列和临时列) df = df.drop(columns=[df.columns[2], '临时列']) # 保存处理后的CSV df.to_csv('处理完成的文件名.csv', index=False)
如果你的文件大到一次性读进内存里吃不消,可以用分块读取的方式:
import pandas as pd chunk_size = 10000 # 每次处理1万行,可根据内存调整 output_file = '处理完成的文件名.csv' first_write = True # 分块读取并处理 for chunk in pd.read_csv('你的原始CSV文件名.csv', chunksize=chunk_size): chunk[['拆分后列1', '临时列']] = chunk.iloc[:, 2].str.split('/', expand=True) chunk[['拆分后列2', '拆分后列3']] = chunk['临时列'].str.extract(r'(\d+)([A-Za-z].*)', expand=True) chunk = chunk.drop(columns=[chunk.columns[2], '临时列']) # 第一块写入时加表头,后续块不加 chunk.to_csv(output_file, mode='a', header=first_write, index=False) first_write = False
方案二:用Excel可视化操作(适合非代码用户)
如果你更习惯用Excel的话,也能快速搞定:
- 用Excel打开你的CSV文件,选中第三列
- 点击顶部「数据」选项卡 → 「分列」:
- 第一步选「分隔符号」,点击下一步
- 第二步勾选「其他」,输入斜杠
/,点击完成,这时第三列会被拆成两列
- 处理拆分后的第二列(比如原来的D列):
- 提取数字部分(对应示例里的45):用Excel 365的话直接用
=TEXTBEFORE(D1, "[A-Za-z]",,,TRUE);旧版Excel可以用=LEFT(D1,LEN(D1)-LEN(SUBSTITUTE(D1,{"0","1","2","3","4","5","6","7","8","9"},""))) - 提取字母开头的部分(对应示例里的K67):Excel 365用
=TEXTAFTER(D1, "[A-Za-z]",,,TRUE);旧版用=RIGHT(D1,LEN(D1)-MAX(IFERROR(FIND({"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"},D1),0)))
- 提取数字部分(对应示例里的45):用Excel 365的话直接用
- 把新生成的列整理好,另存为新的CSV文件就行
小提示:如果你的第三列格式有细微变化(比如字母是小写),正则或者Excel公式里的[A-Za-z]已经覆盖了大小写情况,不用额外调整~
内容的提问来源于stack exchange,提问作者morwi
相关产品推荐
相关产品推荐

