读取pandas中的文本文件,将分隔符作为换行符(\ n)和行终止符作为两个换行符(\ n \ n)

时间:2017-12-16 12:55:50

标签: python pandas file dataframe io

我有一个表格的文本文件:

data.txt中

2
8
4

3
1
9

6
5
7

如何将其读入熊猫数据框

  0 1 2
0 2 8 4
1 3 1 9
2 6 5 7

3 个答案:

答案 0 :(得分:6)

试试这个:

with open(filename, 'r') as f:
    data = f.read().replace('\n',',').replace(',,','\n')

In [7]: pd.read_csv(pd.compat.StringIO(data), header=None)
Out[7]:
   0  1  2
0  2  8  4
1  3  1  9
2  6  5  7

答案 1 :(得分:3)

选项1
如果你知道组中总是有N个元素,那就更容易了 - 只需加载数据并重新塑造 -

pd.DataFrame(np.loadtxt('data.txt').reshape(3, -1))

     0    1    2
0  2.0  8.0  4.0
1  3.0  1.0  9.0
2  6.0  5.0  7.0

要加载整数,请将dtype传递给loadtxt -

pd.DataFrame(np.loadtxt('data.txt', dtype=int).reshape(3, -1))

   0  1  2
0  2  8  4
1  3  1  9
2  6  5  7

选项2
这是更一般的,当你不能保证一次总有3个数字时,它会起作用。这里的想法是将空行读为NaN,并根据NaN s的存在来分隔您的数据。

df = pd.read_csv('data.txt', header=None,  skip_blank_lines=False)
df

      0
0   2.0
1   8.0
2   4.0
3   NaN
4   3.0
5   1.0
6   9.0
7   NaN
8   6.0
9   5.0
10  7.0

df_list = []
for _, g in df.groupby(df.isnull().cumsum().values.ravel()):
    df_list.append(g.dropna().reset_index(drop=True))

df = pd.concat(df_list, axis=1, ignore_index=True)
df

     0    1    2
0  2.0  8.0  4.0
1  3.0  1.0  9.0
2  6.0  5.0  7.0

警告 - 如果您的数据具有NaN,则无法正确分隔。

答案 2 :(得分:2)

虽然这绝对不是处理它的最好方法,但我们可以自己做一些处理。如果值是整数,则以下内容应该起作用:

import pandas as pd

with open('data.txt') as f:
    data = [list(map(int, row.split())) for row in f.read().split('\n\n')]

dataframe = pd.DataFrame(data)

产生:

>>> dataframe
   0  1  2
0  2  8  4
1  3  1  9
2  6  5  7