我需要将包含许多列的文件中的数据加载到我的数据框中,并且我想将它们作为一个连续列读取。这可能听起来很奇怪,但它确实是一种解决原始文件格式不佳的方法。原始文件(让我们称之为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也不起作用。救命啊!
答案 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)
这是你想要的吗?