使用For循环过滤Pandas DataFrame仅获最后一项结果的问题求助
问题原因
你写的循环里,每次遍历bn_stocks的元素时,都会把变量a重新赋值为当前股票对应的过滤结果——前面迭代得到的其他股票数据会被直接覆盖,所以最后a里只剩最后一个元素PNB的内容。
解决方案
方法1:用Pandas内置的isin()(推荐,效率更高)
直接用isin()方法匹配列表里的所有元素,一行代码搞定,尤其适合大型数据集:
bn_stocks = ['HDFCBANK','ICICIBANK','AXISBANK','KOTAKBANK','SBIN','INDUSINDBK','BANKBARODA','AUBANK','FEDERALBANK', 'IDFCFIRSTB','BANDHANBK','PNB'] a = final[final['SYMBOL'].isin(bn_stocks)]
方法2:修改循环代码(保留循环逻辑)
如果一定要用循环实现,需要先初始化一个空列表来收集每次的过滤结果,最后合并成完整的DataFrame:
import pandas as pd # 若未导入pandas需先执行这行 bn_stocks = ['HDFCBANK','ICICIBANK','AXISBANK','KOTAKBANK','SBIN','INDUSINDBK','BANKBARODA','AUBANK','FEDERALBANK', 'IDFCFIRSTB','BANDHANBK','PNB'] result_list = [] for bn_stock in bn_stocks : filt4 = final['SYMBOL'] == bn_stock result_list.append(final[filt4]) # 合并所有结果 a = pd.concat(result_list, ignore_index=True)
注:这个方法效率低于isin(),大型数据集优先选方法1。
内容的提问来源于stack exchange,提问作者smg_08
相关产品推荐
相关产品推荐

