如何使read_csv中的分隔符更加灵活wrt空格?

我需要使用存储在文件中的数据创build一个数据框。 为此,我想使用read_csv方法。 但是,分隔符不是很规则。 某些列由制表符分隔( \t ),其他则以空格分隔。 此外,一些列可以被2或3或更多的空格隔开,甚至可以通过空格和制表符的组合(例如3个空格,2个制表符和1个空格)。

有没有办法告诉大pandas妥善处理这些文件?

顺便说一句,如果我使用Python,我没有这个问题。 我用:

 for line in file(file_name): fld = line.split() 

它工作完美。 它并不在乎字段之间是否有2或3个空格。 即使是空格和制表符的组合也不会造成任何问题。 pandas可以做同样的事吗?

从文档中 ,您可以使用正则expression式或delim_whitespace

 >>> import pandas as pd >>> for line in open("whitespace.csv"): ... print repr(line) ... 'a\tb\tc 1 2\n' 'd\te\tf 3 4\n' >>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+") 0 1 2 3 4 0 abc 1 2 1 def 3 4 >>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True) 0 1 2 3 4 0 abc 1 2 1 def 3 4 
 >>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+") 

将使用任意数量的空格和制表符的组合作为分隔符。

我们可能会考虑这个来处理所有的组合,零次或多次发生。

 pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*") 

pandas有两个csv阅读器,只有冗余领先的空白才灵活:

 pd.read_csv("whitespace.csv", skipinitialspace=True) 

而一个不是

 pd.DataFrame.from_csv("whitespace.csv") 

关于尾随空白都不是灵活的,请参阅正则expression式的答案。 避免delim_whitespace,因为它也允许空格(没有,或\ t)作为分隔符。