Python读取CSV并切片行构建DataFrame遇属性错误求助
解决AttributeError及CSV特殊分隔符处理问题
首先,你遇到的AttributeError: 'list' object has no attribute 'split'是因为csv.reader读取每一行后,会自动将内容拆分为列表(默认按逗号分隔,如果你指定delimiter='|'则按|拆分)。所以row[0:23]返回的是列表的切片,依然是列表,而split()是字符串专属方法,自然会报错。
既然Excel的分隔符设置无效,说明你的CSV文件里的|既有作为分隔符的,也有作为内容的,不能直接用常规分隔方法拆分。我们需要根据你给出的目标格式,手动处理每行的原始字符串。
实现步骤
- 直接读取文件的原始行(跳过
csv.reader自动拆分的步骤) - 根据目标列的规则,拆分每行字符串
- 将拆分后的内容整理成DataFrame
示例代码
import pandas as pd # 存储每一行的处理结果 data = [] with open('actions2.csv', 'r') as csvfile: for line in csvfile: # 去除首尾的换行符和多余的| line_clean = line.strip('\n').strip('|') # 第一步:拆分出col1(ab/5)和剩余内容 col1_part, rest = line_clean.split(' ', 1) # 第二步:将剩余内容按|拆分,取前两部分拼接成col2 split_rest = rest.split('|') col2 = f"{split_rest[0]}|{split_rest[1].strip()}" # 第三步:拆分出col3(ghj)) col3_part = split_rest[2].strip().split(' ', 1)[0] # 将结果添加到列表 data.append({ 'col1': col1_part, 'col2': col2, 'col3': col3_part }) # 构建DataFrame df = pd.DataFrame(data) print(df)
代码说明
- 直接遍历文件的
line获取原始字符串,避免csv.reader的自动拆分干扰 line.strip('\n').strip('|'):去除每行首尾的换行符和多余的|split(' ', 1):只按第一个空格拆分,确保col1准确获取ab/5,剩下的内容保留所有原始格式- 对剩余内容按
|拆分后,将前两部分重新用|拼接,得到col2的内容(保留了内容里的|) - 从第三部分拆分出
ghj),忽略后面的无关内容
测试结果
用你给出的示例行测试,处理后得到的DataFrame会是:
| col1 | col2 | col3 |
|---|---|---|
| ab/5 | (cd ef 6 | text1/123 (lala |
如果你的CSV行有其他变体,可以根据实际的字符位置调整拆分规则,比如用正则表达式来匹配更精准的拆分点(比如匹配ab/5之后的内容,或者ghj)的位置)。
内容的提问来源于stack exchange,提问作者ElaSz
相关产品推荐
相关产品推荐

