python - 如何合并数据框并从函数返回合并的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"
解决方案
您只需将函数的最后一行替换为
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
推荐阅读
- android - 例如,保存设置文件以更改背景主题的好方法是什么?
- javascript - 如何在javascript和javascript之间做ajax
- ios - 在单独的文件中或在一个文件中编写模型?
- affinetransform - 仿射变换会改变邻域吗
- google-chrome - 锚标记在 Firefox 上工作但在 Chrome 上不工作
- json - 使用 RestTemplate 映射 JSON 时忽略包装器类型
- python - 将分位数计算输出转换为数据帧
- codeigniter - 有什么办法可以在codeigniter中获得3份发票副本?
- java - Zulu Server JDK 和 Zulu Client JDK for Windows 之间有什么区别?
- c# - ASP.NET Core Web API Authentication allowing unauthorized access