Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以复杂格式写入(csv)文件_Python_Csv_Pandas_Dataframe - Fatal编程技术网

Python 以复杂格式写入(csv)文件

Python 以复杂格式写入(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 当我将此数据帧写入文件时,以下是我所期

我正在处理一个有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
当我将此数据帧写入文件时,以下是我所期望的:

    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:抱歉,请将右括号放在错误的位置。