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

如何使用Python Pandas将分隔符分隔的单列数据拆分为多列DataFrame

Pandas单列分号分隔CSV转多列DataFrame解决方案

报错原因

你代码报错的核心原因是pd.read_csv默认以逗号为分隔符,你的CSV是分号分隔且未指定分隔符时,pandas会把整行ID;location;level;temperature;season当成唯一列名,后续每行都是这个单列的取值,同时你加了index_col=0直接把第一列设为索引,最终拿到的是结构完全不符合预期的DataFrame,自然不能调用只有Series才有的.str属性。

最优实现方案(符合Python风格,无需逐行遍历)

方案1:读取时直接指定分隔符(最高效,推荐)

直接利用read_csv内置的分隔符参数,一步读取为符合要求的多列DataFrame:

import pandas as pd

# 直接指定分隔符为分号,一步读取为多列
df = pd.read_csv('test.csv', sep=';', header=0)
# 调整列名首字母大写,匹配你需要的输出格式
df.columns = [col.capitalize() for col in df.columns]
# 调整城市、季节字段首字母大写
df['Location'] = df['Location'].str.capitalize()
df['Season'] = df['Season'].str.capitalize()

运行后输出结果和你期望的格式完全一致。

方案2:先读为单列再拆分(适合需要先做全列预处理的场景)

如果确实需要先读取为单列再做拆分,调整读取参数先拿到Series对象再调用拆分方法即可:

import pandas as pd

# 指定不存在的分隔符,让pandas把每行都作为单列值读取,生成Series
s = pd.read_csv('test.csv', sep='\0', header=None).squeeze()
# 提取第一行作为表头
headers = s.iloc[0].split(';')
# 拆分剩余行的内容为多列
df = s.iloc[1:].str.split(';', expand=True)
df.columns = headers
# 同方案1做首字母大写处理即可

关于str.split是否被弃用的说明

pandas.Series.str.split是官方长期支持的字符串处理方法,完全没有被弃用,你查到的弃用信息大概率是旧版本个别参数的调整,而非方法本身废弃。只有DataFrame对象没有内置的.str属性,不能直接对整个DataFrame调用该方法,针对单列Series调用是完全合规的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:05