我正在浏览目录树。在每个子目录中,遇到一个名为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...")
答案 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")