使用Pandas读取CSV文件:复杂分隔符

7
我有一个csv文件,想用Python Pandas读取。头部和行如下所示:
 A           ^B^C^D^E  ^F          ^G           ^H^I^J^K^L^M^N

很明显,分隔符是^,有时会有一些奇怪的空格。我该如何完美地读取这个文件?
我正在使用以下命令来读取csv文件:
df = pd.read_csv('input.csv', sep='^')
5个回答

10
使用正则表达式\s*\^,其中\s*表示0个或多个空格,^表示匹配开头。在此处需要指定Python引擎以避免关于正则表达式支持的警告:
In [152]:

t="""A           ^B^C^D^E  ^F          ^G           ^H^I^J^K^L^M^N"""
df= pd.read_csv(io.StringIO(t), sep='\s*\^', engine='python')
df.columns
Out[152]:
Index(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N'], dtype='object')

@VikasChauhan 发布一个新问题,包含原始数据、读取 df 的代码和所有堆栈跟踪。通过评论提问是适得其反的。 - EdChum

5

您能否提供正则表达式作为分隔符?

sep = re.compile(r'[\^\s]+')

2
您的分隔符可以是一个正则表达式,尝试使用类似以下的内容:
df = pd.read_csv('input.csv', sep="[ ^]+")

正则表达式应该使用任意数量的空格或插入符 (^) 作为单个分隔符。

0
如果您的文件中唯一的空格是列之间的额外空格(即没有列具有带有空格的原始文本),那么一个简单的解决方法就是删除文件中的所有空格。一个示例命令如下:
<input.csv tr -d '[[:blank:]]' > new_input.txt

0

按照您所做的方式读取文件,然后为每个字符串列删除额外的空格:

df = (pd.read_csv('input.csv', sep="^")
      .apply(lambda x: x.str.strip() if isinstance(x, str) else x))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接