【问题标题】:Create Dataframe columns from list从列表创建数据框列
【发布时间】:2020-09-19 21:14:42
【问题描述】:

免责声明:初学者 如果已经发布了重复的问题,将删除

我正在寻找创建一个脚本,该脚本将从多个网页中获取数据并将其作为列存储在数据框中。 正如你从下面看到的,我可以成功地获取一只股票的数据,我想知道有没有人有想法来修改它,所以我可以使用类似

stocklist = ["AMZN", "GOOG", "TSLA"]

下面的脚本:

from time import sleep
from selenium import webdriver
import pandas as pd



driver = webdriver.Chrome('/chromedriver')

stock_list = ['AMZN']
values = []
metrics = []
def stocks():
    for i in stock_list:
        driver.get(f"http://finviz.com/quote.ashx?t={i}")
        value = driver.find_elements_by_xpath("//td[@class='snapshot-td2']")
        metric = driver.find_elements_by_xpath("//td[@class='snapshot-td2-cp']")
        for i in metric:
            metrics.append(i.text)

        for a in value:
           values.append(a.text)





def frames():
    d = pd.DataFrame({'Metrics': metrics,'AMZN': values})

    print(d)
    d.to_csv("AMZN.csv")

理想情况下,希望为每只新股票及其对应值创建一个列。 目前输出如下:

         Metrics     AMZN
0          Index  S&P 500
1            P/E   116.67
2      EPS (ttm)    20.93
3    Insider Own   11.20%
4   Shs Outstand  498.00M
..           ...      ...
67         SMA20    2.96%
68         SMA50   10.13%
69        SMA200   27.34%
70        Volume  689,073
71        Change    0.93%

【问题讨论】:

  • 你能给我们举个例子说明你的数据框应该是什么样子吗?
  • 您想获取列表中的所有列名..?
  • 道歉,添加输出描述
  • 随便d = pd.DataFrame({stock_label: value_list for stock_label, value_list in zip(stock_list, values)}, index=metrics)
  • 不,恐怕只是一遍又一遍地给出表格中的第一个值,尽管AMZN GOOG Index S&P 500 116.67 P/E S&P 500 116.67 布局很好

标签: python arrays pandas list dataframe


【解决方案1】:

这很简单:

from selenium import webdriver
from time import sleep
from selenium import webdriver
import pandas as pd

driver = webdriver.Chrome(executable_path=r"/chromedriver")

df = pd.DataFrame()

stock_list = ["AMZN", "GOOG", "TSLA"]

for stock in stock_list:
    values = []
    metrics = []

    driver.get(f"http://finviz.com/quote.ashx?t={stock}")
    driver.implicitly_wait(10)

    page_metrics = driver.find_elements_by_xpath("//td[@class='snapshot-td2-cp']")  
    for metric in page_metrics:
        metrics.append(metric.text)

    page_values = driver.find_elements_by_xpath("//td[@class='snapshot-td2']")
    for value in page_values:
        values.append(value.text)

    metric_column = 'Metrics_'+stock   
    df[metric_column] = metrics
    df[stock] = values

df.to_csv("finviz.csv")

只需浏览您会理解的代码。这是工作表中的输出:

我留下了一部分供您弄清楚和修复 - 我正在为 each stock 编写 'Metrics' 列 - 如果这是您的要求,您可以将其更改为单列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2016-02-29
    • 2016-10-21
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多