如何使分隔在大熊猫read_csv更灵活WRT的空白?(How to make separator

2019-07-20 08:53发布

我需要创建使用存储在一个文件中的数据的数据帧。 为此,我想用read_csv方法。 然而,隔板是不很规则。 一些列由制表符(分隔\t ),其他都用空格分开。 此外,一些列可以由2个或3个或多个空格或甚至通过的空格和制表符的组合(例如3-位,两个选项卡并且然后1个空间)分开。

有没有办法告诉大熊猫正确对待这些文件?

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

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

和它的作品完美。 如果有字段之间的2个或3个空格它并不关心。 即使是空格和制表符的组合不会引起任何问题。 大熊猫也能这样做?

Answer 1:

从文档 ,您可以使用正则表达式或delim_whitespace

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


Answer 2:

>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+")

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



Answer 3:

我们可以认为这是把所有的组合和零个或多个的照顾。

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


Answer 4:

熊猫有两个CSV读者,不仅是灵活态度多余的前导空格:

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

而一个不

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

无论是出的现成灵活态度尾随空白,请参阅使用正则表达式的答案。 避免delim_whitespace,因为这也让刚刚空间(无,或\ T)作为分隔符。



文章来源: How to make separator in pandas read_csv more flexible wrt whitespace?