Python 以复杂格式写入(csv)文件
我正在处理一个有6列的pandas数据帧,我想将这些列写入一个文件,最好是.txt格式(但我使用的是df.to_csv方法,而不是.csv扩展名,所以它似乎是一个文本文件)。 下面是示例dfPython 以复杂格式写入(csv)文件,python,csv,pandas,dataframe,Python,Csv,Pandas,Dataframe,我正在处理一个有6列的pandas数据帧,我想将这些列写入一个文件,最好是.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 当我将此数据帧写入文件时,以下是我所期
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 = " ")
或者我应该完全采用另一种方法,比如为任务定义一个函数?首先,将平面列名更改为两级分层名称:将新名称准备为元组列表,并从列表中创建新索引
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
请注意,每列有两个名称,并且第一个名称是重复的。现在,堆叠dataframe:将第二个列名转换为行名:
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
这个答案会对你的问题有帮助。我想知道OP是否喜欢将数据帧作为固定宽度的文件,如
np.savetxt('output.txt',tall.values,fmt='%d')
?您好,我尝试了u建议的代码,但在执行第一部分之后(堆叠之前),我遇到了一个类型错误。确切的错误是'TypeError:无法使用此索引类型执行truediv:抱歉,请将右括号放在错误的位置。