问题描述
我需要将数据从具有许多列的文件加载到我的数据框中,并且希望将它们作为一个连续的列读取。 这听起来可能很奇怪,但这实际上是解决原始文件格式错误的一种方法。 原始文件(我们称其为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
我希望这是可以与现有数据框连接的一列数据框(或系列)。 因此,当我打印时,我想要:
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也不起作用。 救命!
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
2楼
如果您将文本文件作为整数列表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)
是你想要的吗?