我有一个表格的文本文件:
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
答案 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