使用Pandas读取空格分隔的数据

20 投票
1 回答
39859 浏览
提问于 2025-04-18 01:00

我以前用 numpy.loadtxt() 来读取数据。不过最近我在StackOverflow上发现,使用 pandas.read_csv() 读取数据要快得多。

我用以下代码来读取这些数据:

pd.read_csv(filename, sep=' ',header=None)

现在我遇到的问题是,我的数据分隔符可能是一个空格、x 个空格,甚至是一个制表符(tab)。

我的数据可能长这样:

56.00     101.85 52.40 101.85 56.000000 101.850000 1
56.00 100.74 50.60 100.74 56.000000 100.740000 2
56.00 100.74 52.10 100.74 56.000000 100.740000 3
56.00 102.96 52.40 102.96 56.000000 102.960000 4
56.00 100.74 55.40 100.74 56.000000 100.740000 5

这导致了这样的结果:

     0       1     2       3     4       5   6       7   8
0   56     NaN   NaN  101.85  52.4  101.85  56  101.85   1
1   56  100.74  50.6  100.74  56.0  100.74   2     NaN NaN
2   56  100.74  52.1  100.74  56.0  100.74   3     NaN NaN
3   56  102.96  52.4  102.96  56.0  102.96   4     NaN NaN
4   56  100.74  55.4  100.74  56.0  100.74   5     NaN NaN

我得说明一下,我的数据超过100 MB。所以我不能先对数据进行预处理或清理。有没有什么办法解决这个问题?

1 个回答

41

你最开始的那一行:

pd.read_csv(filename, sep=' ',header=None)

是把分隔符设定为一个空格,因为你的CSV文件可能会有空格或制表符(Tab),所以你可以像下面这样给sep参数传递一个正则表达式:

pd.read_csv(filename, sep='\s+',header=None)

这段代码把分隔符定义为一个或多个空格。这里有一个很实用的速查表,列出了正则表达式的用法。

撰写回答