迭代列表并通过函数传递结果并将结果保存在数据框中

Posted

技术标签:

【中文标题】迭代列表并通过函数传递结果并将结果保存在数据框中【英文标题】:iterating a list and passing results through a function and saving results in a dataframe 【发布时间】:2021-12-16 11:43:00 【问题描述】:

我有这份清单:

Peer_List_Members = [1967, 2338, 421, 1275, 2499, 2240, 881, 2719, 2894, 2198, 3120, 3160, 635]

我按如下方式遍历这个列表:

for x in Peer_List_Members:
        x = ID_Search(str(x))
        print(x)

上述函数通过函数“ID_Search(input_id)”传递每个元素,然后在数据库中查找数字的值并返回查找值:

def ID_Search(input_id): 
    returns_name = pd.read_sql_query("""
    SELECT BaseHoldingID
    FROM Holdings
    WHERE HoldingID=""" + input_id
    , conn)
    returns_name = pd.DataFrame(returns_name)
    BaseHoldingID = returns_name['BaseHoldingID'][0]
    return(BaseHoldingID)

print(x) 的输出如下:

1774
2134
421
1267
2295
2046
867
2517
2694
2010
2874
2913
629

但是当迭代并尝试使用以下方法保存到新列表(lst)时:

lst=[]
for x in Peer_List_Members:
    x = ID_Search(str(x))
    lst.append(x)
    print(lst)

我得到了这个奇怪的输出!

[1774]
[1774, 2134]
[1774, 2134, 421]
[1774, 2134, 421, 1267]
[1774, 2134, 421, 1267, 2295]
[1774, 2134, 421, 1267, 2295, 2046]
[1774, 2134, 421, 1267, 2295, 2046, 867]
[1774, 2134, 421, 1267, 2295, 2046, 867, 2517]
...........
[1774, 2134, 421, 1267, 2295, 2046, 867, 2517, 2694, 2010, 2874, 2913, 629]

问题:首先我如何在附加时修复奇怪的输出。但理想情况下,我想将原始列表与新列表组合成一个数据框。

感谢您的任何帮助!非常感谢。

【问题讨论】:

您只创建一个空列表一次,因此每次浏览列表时,您都在添加最新项目并打印整个列表,而不是打印最新条目。如果您只想打印最近的项目,您可以使用print(lst[-1]) 【参考方案1】:

好的 - 我做了一些挖掘/谷歌搜索并且能够找到一种方法......

def peerBaseHolding():
     return [ID_Search(str(number)) for number in Peer_List_Members]

peerBaseHolding = peerBaseHolding()
peerBaseHolding = pd.DataFrame(peerBaseHolding, columns='BaseHoldingID')
Peer_List_Members = pd.DataFrame(Peer_List_Members, columns='HoldingID')

peerList = Peer_List_Members.merge(peerBaseHolding, how='inner', left_index=True, right_index=True)
peerList

它有效,但有更好的方法吗?

【讨论】:

以上是关于迭代列表并通过函数传递结果并将结果保存在数据框中的主要内容,如果未能解决你的问题,请参考以下文章

python 迭代值列表,应用函数并将结果作为列表返回

如何从数据框中迭代值并将值传递给 Python 中的发送电子邮件函数

将每次迭代生成的数据框保存在列表中

在剃刀中将迭代数据从按钮传递到模态

循环子集,获取文件并将结果保存在数据框中

Pyspark:将UDF的结果迭代地写回数据框不会产生预期的结果