使用dfs列表编译来自多个CSV的数据帧

时间:2017-10-12 19:13:14

标签: python-3.x pandas

我正在尝试从50个csv文件创建单个数据帧。我只需要使用两列csv文件,即' Date'并且'关闭'。我尝试在for循环中使用df.join函数,但是它占用了大量的内存并且我得到错误" Killed:9"处理了近22-23个csv文件后。 所以,现在我尝试使用for循环创建一个只有2列的Dataframe列表,然后我尝试在循环函数之外连接dfs。

我有以下问题需要解决: - (i)虽然大多数csv文件的开始日期的开始日期为2000-01-01,但很少有csvs具有较晚的开始日期。所以,我希望主数据框应该包含所有日期,使用NaN或csv的空字段以及更晚的开始日期。 (ii)我希望将它们作为索引在日期中连接起来。

我的代码是: -

def compileData(symbol):
    with open("nifty50.pickle","rb") as f:
        symbols=pickle.load(f)
    dfList=[]
    main_df=pd.DataFrame()
    for symbol in symbols:
        df=pd.read_csv('/Users/uditvashisht/Documents/udi_py/stocks/stock_dfs/{}.csv'.format(symbol),infer_datetime_format=True,usecols=['Date','Close'],index_col=None,header=0)
        df.rename(columns={'Close':symbol}, inplace=True)
        dfList.append(df)
    main_df=pd.concat(dfList,axis=1,ignore_index=True,join='outer')


   print(main_df.head())

1 个答案:

答案 0 :(得分:1)

您可以在read_csv或index_col=0中使用dflist.append(df.set_index('Date'))将Date列放入每个数据帧的索引中。然后使用轴= 1的pd.concat,Pandas将使用内部数据对齐来根据索引对齐所有数据帧。