我正在处理有6列的pandas dataFrame,我想将这些列写入文件,最好是.txt格式(但我使用的是df.to_csv方法,而不是使用.csv扩展名,所以它出现了是一个文本文件)。 以下是示例df
a b c d e f
0 1 6 34 99 2 5
1 9 8 89 56 33 77
2 4 55 45 87 54 34
当我将此数据帧写入文件时,以下是我的期望:
1 6 34
99 2 5
9 8 89
56 33 77
4 55 45
87 54 34
正如我们所看到的,行的前三个和后三个值应该在文件的不同行中,用于df的所有行;没有标题和索引。
以下是我用来消除标题和索引的简单代码,但我不知道如何实现其余条件。我不能手动格式化输出文件,因为它是一个包含数千行的庞大数据帧。一旦我为一个df写了数据,我将不得不从另一个同样大的df(结构相同)中追加数据。
with open('output', 'a+') as f:
df.to_csv(f, header = False, index = False, sep = " ")
或者我应该完全采用不同的方法,比如为任务定义一个函数?
答案 0 :(得分:1)
首先,将平面列名称更改为两级层次结构名称:将新名称准备为元组列表,并从列表中创建新索引。
new_columns = [(a,b) for b in (0,1) for a in df.columns[:len(df.columns)/2]]
#[('a', 0), ('b', 0), ('c', 0), ('a', 1), ('b', 1), ('c', 1)]
df.columns = pd.MultiIndex.from_tuples(new_columns)
#df
# a b c a b c
# 0 0 0 1 1 1
#0 1 6 34 99 2 5
#1 9 8 89 56 33 77
#2 4 55 45 87 54 34
注意每列有两个名称,并重复名字。现在,堆叠数据帧:将第二列名称转换为行名称:
tall = df.stack()
# a b c
#0 0 1 6 34
# 1 99 2 5
#1 0 9 8 89
# 1 56 33 77
#2 0 4 55 45
# 1 87 54 34
高大的数据框已准备好转到文件:
tall.to_csv(filename, header=False, index=False, sep=' ')
#1 6 34
#99 2 5
#9 8 89
#56 33 77
#4 55 45
#87 54 34