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

使用Pandas读取空格分隔CSV文件时,如何处理字段内包含空格的问题

如何正确读取包含内部空格字段的空格分隔CSV文件?

这个问题很典型——当CSV的分隔符和字段内部的空格冲突时,直接用sep='\s+'分割就会拆坏像New York、Las vegas这类包含空格的字段。我给你几个可行的解决方案:

方法1:使用固定宽度格式读取(最简便)

你的数据格式刚好适合固定宽度的文本文件:Name是短字符串,Age是两位数字,剩下的内容全部属于City。Pandas的read_fwf()函数可以自动识别这种固定宽度的列结构,完美解决问题:

import pandas as pd
df = pd.read_fwf('users_5.csv')
print("Contents of Dataframe :")
print(df)

运行后就能得到你期望的DataFrame输出,这个方法无需额外配置,对这类格式的文件最友好。

方法2:自定义行分割逻辑(灵活适配复杂场景)

如果你的数据格式不确定固定宽度,可以用Python内置的csv模块先手动处理每行数据,再转成DataFrame:

import pandas as pd
import csv

data_rows = []
with open('users_5.csv', 'r') as file:
    # 按空格读取,会把连续空格拆成空元素
    csv_reader = csv.reader(file, delimiter=' ')
    # 获取表头
    header = next(csv_reader)
    for row in csv_reader:
        # 过滤掉空字符串
        cleaned = [item for item in row if item]
        # 前两个元素是Name和Age,剩下的合并为City
        name, age = cleaned[:2]
        city = ' '.join(cleaned[2:])
        data_rows.append([name, age, city])

# 转成DataFrame
df = pd.DataFrame(data_rows, columns=header)
print("Contents of Dataframe :")
print(df)

这种方法适合更复杂的场景,比如字段长度变化大,但前N个字段是确定不含空格的情况。

方法3:正则表达式分隔符(精准匹配分隔位置)

可以用正则表达式指定仅在数字(Age字段)后面的空格处分割,这样就不会破坏City字段里的空格:

import pandas as pd
# 正则表达式含义:匹配数字后面的一个或多个空格作为分隔符
df = pd.read_csv('users_5.csv', sep='(?<=\d)\s+', engine='python')
print("Contents of Dataframe :")
print(df)

这里的(?<=\d)是正向断言,确保分隔符前面是数字(也就是Age字段的结尾),只会把Age和City之间的空格当作分隔符,完美保留City内部的空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:22:43