首页 > 解决方案 > 如何合并数据框并从函数返回合并的df?

问题描述

我正在通过一个函数从雅虎读取数据。我有一个股票清单,并定义了结束和开始时间。然后使用下面的代码遍历股票列表并将每个股票数据分别存储在名称 X+'StockName' 下。我认为这部分工作正常。

但随后我想生成一个数据框,将所有这些单一股票数据合并并作为函数的结果给出。我被严重困在那里。

你能帮帮我吗?

secs = ['UNH','XOM','HD','DIS','GE','USB','ORCL','KO','PEP','MMM']
DataCollector = ""

def DataCollection(secList,startTime,endTime):
    newList = []
    for i in range(len(secList)):
        DataCollector = 'X' + str(secList[i])
        print(DataCollector)
        newList.append(DataCollector)
        print(newList)
        DataCollector = pd.DataFrame(pdr.get_data_yahoo(secList[i], start = start, end = end)['Adj Close'])
    data = pd.concat(pd.Series(newList))

我尝试了很多方法,这是我为上面的代码得到的最后一个错误。TypeError: first argument must be an iterable of pandas objects, you pass a object of type "Series"

标签: pythonpandasdataframemerge

解决方案


您只需将函数的最后一行替换为

def DataCollection(secList,startTime,endTime):
    newList = []
    for i in range(len(secList)):
        DataCollector = 'X' + str(secList[i])
        DataCollector = pd.DataFrame(pdr.get_data_yahoo(secList[i], start = start, end = end)['Adj Close'])
        newList.append(DataCollector)
    return pd.concat(newList).reset_index

例子

import pandas as pd
import numpy as np


def DataCollection():
    newList = []
    for _ in range(2):
        df = pd.DataFrame({"X" : np.random.randint(0,10,size=4), "Y" : list("abcd")})
        print(df)
        print("*" * 10)
        newList.append(df)
    return pd.concat(newList).reset_index()

print(DataCollection())

输出

   X  Y
0  9  a
1  4  b
2  7  c
3  6  d
**********
   X  Y
0  5  a
1  0  b
2  0  c
3  6  d
**********
   index  X  Y
0      0  9  a
1      1  4  b
2      2  7  c
3      3  6  d
4      0  5  a
5      1  0  b
6      2  0  c
7      3  6  d

推荐阅读