使用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
相关产品推荐
相关产品推荐

