【问题标题】:How to dynamically append multiple data frames together?如何动态地将多个数据帧附加在一起?
【发布时间】:2020-10-28 06:58:56
【问题描述】:

我正在将数据从 CSV 加载到数据框中,然后遍历行以进行 Web 查询。我的所有代码如下所示。

import pandas as pd
from bs4 import BeautifulSoup
import requests
import pandas as pd


df = pd.read_csv('C:\\Users\\ryans\\OneDrive\\Desktop\\Briefcase\\NY Times Dates\\exchanges.csv')
print(df)

for index, row in df.iterrows():
    passin = 'https://markets.on.nytimes.com/research/markets/holidays/holidays.asp?display=market&exchange='+row["Symbol"]
    dfs = pd.read_html(passin)
    df = dfs[0]
    print(df)

我在这里的最后一步是将数据帧#2 附加到数据帧#1 下,将数据帧#3 附加到数据帧#2 下,依此类推。我在 Google 上搜索了一个解决方案,发现了几种将 #1 附加到 #1 下的技术,就是这样。

我不确定如何将数据帧#n 附加到数据帧#n-1。我怎样才能做到这一点?我猜这是一个增量过程,但我无法让它在这里工作。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    您可以使用带有 pd.concat 的生成器表达式:

    url = 'https://markets.on.nytimes.com/research/markets/holidays/holidays.asp?display=market&exchange='
    
    res = pd.concat(pd.read_html(f'{url}{symbol}')[0] for symbol in df['Symbol'])
    

    如果您希望在连接时忽略索引,请使用参数ignore_index=True

    gen = (pd.read_html(f'{url}{symbol}')[0] for symbol in df['Symbol'])
    res = pd.concat(gen, ignore_index=True)
    

    【讨论】:

    • 你好。在过去的 2 年多时间里,我一直关注您和您的 cmets。我对你的许多 cmets 投了赞成票!!我知道你知道你的东西!!毫无疑问!我听从了你对这篇文章的建议,但我无法完成这项工作。我一定犯了一个错误。我收到此错误:KeyError: 'Symbol' Thoughts???
    • @ryguy72,首先检查print(df.columns),看看那里是否存在'Symbol',然后检查print(df['Symbol']),看看它是否有效。您当前的解决方案意味着有一个标记为'Symbol' 的系列。
    • 好吧,当我执行 'print(df['Symbol'])' 时,我得到了相同的结果。这是“exchanges.csv”中的前 3 行 交易所代码名称 澳大利亚证券交易所有限公司 - 澳大利亚 ASX Euronext 巴黎 - 法国 PAR
    • 同样的结果,我假设你的意思是KeyError。然后检查print(df.columns)。您可能有一些不需要的空格(请参阅here 更正)。
    • @ryguy72,我的解决方案不涉及明确的for 循环。不要使用iterrows
    猜你喜欢
    • 2020-06-14
    • 2020-10-12
    • 2020-03-28
    • 2015-06-06
    相关资源
    最近更新 更多