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

时间:2015-05-14 21:57:38

标签: python csv pandas

我有一个csv文件,我想用python panda阅读。标题和行看起来如下:

 A           ^B^C^D^E  ^F          ^G           ^H^I^J^K^L^M^N

显然它看到,分隔符是^,有时候有一些奇怪的空格。我怎样才能完美地阅读这个文件?

我使用以下命令来读取csv文件:

df = pd.read_csv('input.csv', sep='^')

5 个答案:

答案 0 :(得分:8)

使用正则表达式\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')

答案 1 :(得分:4)

你不能作为分隔符提供正则表达式吗?

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

答案 2 :(得分:2)

您的分隔符可以是正则表达式,因此请尝试以下方法:

df = pd.read_csv('input.csv', sep="[ ^]+")

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

如果文件中唯一的空格是列之间的额外空格(即没有列具有带空格的原始文本),则可以轻松修复文件中的所有空格。执行此操作的示例命令是:

<input.csv tr -d '[[:blank:]]' > new_input.txt