Python 如何制作更好的循环?(良好做法)

Python 如何制作更好的循环?(良好做法),python,pandas,loops,Python,Pandas,Loops,由于我一直在使用数据帧列表进行分析,我想找到一种更快地重新创建此列表的方法。此外,欢迎提供有关良好做法的提示 当我使用更多的股票时,这段代码花费的时间太长。我想改进这一部分: stocks_list_DataFrames = [] stocks_all_symbol_list = list(stocks_all_csv['Symbol'].unique()) for symbol in stocks_all_symbol_list: stock_data = stocks_all_csv

由于我一直在使用数据帧列表进行分析,我想找到一种更快地重新创建此列表的方法。此外,欢迎提供有关良好做法的提示

当我使用更多的股票时,这段代码花费的时间太长。我想改进这一部分:

stocks_list_DataFrames = []
stocks_all_symbol_list = list(stocks_all_csv['Symbol'].unique())
for symbol in stocks_all_symbol_list:
    stock_data = stocks_all_csv[(stocks_all_csv['Symbol'] == symbol)] 
    stocks_list_DataFrames.append(stock_data)
    
对于再现性,复制以下内容:

import pandas as pd
from datetime import date
import yfinance as yf

stocks_all = []
start = date(2017, 10, 1)
end = date(2020, 6, 25)
list_symbols = ["CERS", "CERU", "CETV", "CEVA", "CFA", "CFBK", "CFFI", "CFFN",
               "CFGE", "CFNB", "CFNL", "CFO", "CFRX", "CFRXW", "CFRXZ", "CG", 
               "CGEN", "CGIX", "CGNX", "CGO", "CHCI", "CHCO", "CHDN", "CHEF",
               "CHEV"]

for symbol in list_symbols :
    print(symbol)
    stock_data = yf.download(symbol, start, end)
    stock_data.insert(0, 'Symbol', symbol) 
    stocks_all.append(stock_data)
    
# pd.concat(stocks_all).to_csv('stocks_all.csv')
# stocks_all_csv = pd.read_csv('.../stocks_all.csv')

stocks_all_csv = pd.concat(stocks_all)
for symbol, stock_data in stocks_all_csv.groupby('Symbol'):

任何帮助都将不胜感激。

您正在筛选每个股票名称的整个df。请改为尝试
.groupby()
。它根据所选特征对df进行一次索引,并返回一个
groupby对象
,其中包含唯一特征(或组合或特征)列表和匹配行的索引

循环如下:

import pandas as pd
from datetime import date
import yfinance as yf

stocks_all = []
start = date(2017, 10, 1)
end = date(2020, 6, 25)
list_symbols = ["CERS", "CERU", "CETV", "CEVA", "CFA", "CFBK", "CFFI", "CFFN",
               "CFGE", "CFNB", "CFNL", "CFO", "CFRX", "CFRXW", "CFRXZ", "CG", 
               "CGEN", "CGIX", "CGNX", "CGO", "CHCI", "CHCO", "CHDN", "CHEF",
               "CHEV"]

for symbol in list_symbols :
    print(symbol)
    stock_data = yf.download(symbol, start, end)
    stock_data.insert(0, 'Symbol', symbol) 
    stocks_all.append(stock_data)
    
# pd.concat(stocks_all).to_csv('stocks_all.csv')
# stocks_all_csv = pd.read_csv('.../stocks_all.csv')

stocks_all_csv = pd.concat(stocks_all)
for symbol, stock_data in stocks_all_csv.groupby('Symbol'):
现在,
symbol
是一个字符串(如df中所示),而
stock\u data
是一个经过过滤的df,就像在代码中一样

groupby中的主参数可以是列、级别、映射、函数、索引器或包含上述任何类型的列表


这似乎是一个不错的选择,但仍然缺乏我想要的速度…谢谢你分享时间比较?你发表评论时我就开始跑步了。。。它还没有停止。上一次差不多也花了这一次,只是又看了一眼你的数据…为什么你要附加然后分离数据?您是否对所有的数据进行联合分析?你能单独存储dfs吗?迭代是熊猫中效率最低的方法。。。请参阅此问题和文档中“入门”部分的警告