使用pandas.read_table将文件作为一个连续列

时间:2017-02-16 00:41:23

标签: python pandas dataframe file-io

我需要将包含许多列的文件中的数据加载到我的数据框中,并且我想将它们作为一个连续列读取。这可能听起来很奇怪,但它确实是一种解决原始文件格式不佳的方法。原始文件(让我们称之为parameter.txt)的格式类似于此但更大:

 # parameter
10 9 8 6 5 3 1
9  7 6 5 4 2 1
10 8 6 5 2 1 0
7  6 5 4 3 2 1

我希望这是一个可以与现有Dataframe连接的单列Dataframe(或Series)。所以,当我打印它时,我想:

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

我一直在尝试这样的事情:

import pandas

existing_df = pd.Dataframe()

parameter_df = pd.read_table(parameter.txt, header=0, delim_whitespace=True, names=['parameter'])
existing_df = pd.concat([existing_df, parameter_df], axis=1)

...但是我最后的数据框中的每个元素都加上了整行文本,加上一堆NaN。使用squeeze = True也不起作用。救命啊!

2 个答案:

答案 0 :(得分:1)

您需要使用read_table正确设置参数。如果不相关,可以跳过第一行,在读取文件后,使用stack将数据帧转换为长格式,单行

parameter_df = pd.read_table("parameter.txt", header=None, delim_whitespace=True, skiprows=1)

parameter_df.stack().reset_index(drop=True)

#0     10
#1      9
#2      8
#3      6
#4      5
#5      3
#6      1
#7      9
#8      7
#9      6
#10     5
#11     4
#12     2
#13     1
#14    10
#15     8
#16     6
#17     5
#18     2
#19     1
#20     0
#21     7
#22     6
#23     5
#24     4
#25     3
#26     2
#27     1
#dtype: int64

答案 1 :(得分:0)

如果您将文本文件作为整数列表l打开,并将其作为系列读取。

 f = open('./parameter.txt').read()
f_list = f.replace('\n', ' ').split(' ')
l = [int(elem) for elem in f_list if elem != ''] 
parameter_df = pd.DataFrame(pd.Series(l))
existing_df = pd.concat([existing_df, parameter_df], axis=1)

这是你想要的吗?