当前位置: 代码迷 >> python >> 使用pandas.read_table作为一个连续列读取文件
  详细解决方案

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

热度:84   发布时间:2023-06-13 17:15:58.0

我需要将数据从具有许多列的文件加载到我的数据框中,并且希望将它们作为一个连续的列读取。 这听起来可能很奇怪,但这实际上是解决原始文件格式错误的一种方法。 原始文件(我们称其为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也不起作用。 救命!

您需要使用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

如果您将文本文件作为整数列表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)

是你想要的吗?

  相关解决方案