将数据附加到数据框并保存到.csv,但csv为空

时间:2018-07-21 21:48:58

标签: python pandas

我正在浏览目录树。在每个子目录中,遇到一个名为portfolio-insts-summary.csv的文件时,我打开该文件,并将.csv的内容读取到名为df的数据帧中。然后,我将df数据帧附加到另一个名为final_df的数据帧。代码完成遍历目录树后,数据帧df_final将保存到名为final.csv的.cvs中。我已经打印了每个df数据帧的开头,并且其中包含数据,但是当我将df_final写入final.csv .csv文件时,文件已创建但为空。有人可以让我知道我做错了什么,为什么final.csv文件为空,即使df有每个文件的数据吗?请参见下面的代码:

谢谢

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 18 22:30:05 2018

@author: stacey
"""


import pandas as pd
import os

from pandas.tseries.offsets import BDay

def main():        

    folder = '/home/stacey/work/jp_aus_bk_tests/port_100k/'

    df_final = pd.DataFrame()

    for dirname, dirs, files in os.walk(folder):
        for filename in files:
            filename_without_extension, extension = os.path.splitext(filename)
            if filename_without_extension == 'portfolio-insts-summary':

                df = pd.read_csv(dirname + '/' +filename)

                df_final.append(df)

    df_final.to_csv('final.csv', index=False)



if __name__ == "__main__":

    print ("Processing_Results...17/07/18")


    try:

        main()



    except KeyboardInterrupt:

        print ("Ctrl+C pressed. Stopping...")  

2 个答案:

答案 0 :(得分:1)

之所以会这样,是因为DataFrame.append返回了一个新的数据框,而不是就地修改原始数据框。 (docs)。如果将代码更改为df_final = df_final.append(df),它应该可以正常工作。

答案 1 :(得分:0)

您可以将所有框架添加到数组中,然后使用pd.concat进行组合。我还需要在上次打印之前致电main()

import pandas as pd
import os

def main():

    folder = './dir/'

    frames = []

    for dirname, dirs, files in os.walk(folder):
        for filename in files:
            filename_without_extension, extension = os.path.splitext(filename)
            if filename_without_extension == 'portfolio-insts-summary':

                df = pd.read_csv(dirname + '/' +filename)
                frames.append(df)


    final = pd.concat(frames)
    final.to_csv('final.csv', index=False)


if __name__ == "__main__":
    main()
    print ("Processing_Results...17/07/18")