我需要创建使用存储在一个文件中的数据的数据帧。 为此,我想用read_csv
方法。 然而,隔板是不很规则。 一些列由制表符(分隔\t
),其他都用空格分开。 此外,一些列可以由2个或3个或多个空格或甚至通过的空格和制表符的组合(例如3-位,两个选项卡并且然后1个空间)分开。
有没有办法告诉大熊猫正确对待这些文件?
顺便说一句,如果我使用Python我没有这个问题。 我用:
for line in file(file_name):
fld = line.split()
和它的作品完美。 如果有字段之间的2个或3个空格它并不关心。 即使是空格和制表符的组合不会引起任何问题。 大熊猫也能这样做?
从文档 ,您可以使用正则表达式或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
>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+")
会使用任意数量的空格和制表符作为分隔符的任意组合。
我们可以认为这是把所有的组合和零个或多个的照顾。
pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*")
熊猫有两个CSV读者,不仅是灵活态度多余的前导空格:
pd.read_csv("whitespace.csv", skipinitialspace=True)
而一个不
pd.DataFrame.from_csv("whitespace.csv")
无论是出的现成灵活态度尾随空白,请参阅使用正则表达式的答案。 避免delim_whitespace,因为这也让刚刚空间(无,或\ T)作为分隔符。