Python DataReader - 更新新信息

Posted

技术标签:

【中文标题】Python DataReader - 更新新信息【英文标题】:Python DataReader - Update with new information 【发布时间】:2021-04-20 19:04:22 【问题描述】:
import pandas as pd
from pandas_datareader import data as wb

tickers = ["MMM",   "ABT",  "ABBV", "ABMD", "ACN",  "ATVI", "ADBE", "AMD",  "AAP",  "AES",  "AFL",  "A",    "APD",  "AKAM", "ALK",  "ALB",  "ARE",  "ALXN", "ALGN", "ALLE", "LNT",  "ALL",  "GOOGL",    "GOOG", "MO",   "AMZN", "AMCR", "AEE",  "AAL",  "AEP",  "AXP",  "AIG",  "AMT",  "AWK",  "AMP",  "ABC",  "AME",  "AMGN", "APH",  "ADI",  "ANSS", "ANTM", "AON",  "AOS",  "APA",  "AAPL", "AMAT", "APTV", "ADM",  "ANET", "AJG",  "AIZ",  "T",    "ATO",  "ADSK", "ADP",  "AZO",  "AVB",  "AVY",  "BKR",  "BLL",  "BAC",  "BK",   "BAX",  "BDX", "BBY",   "BIO",  "BIIB", "BLK",  "BA",   "BKNG", "BWA",  "BXP",  "BSX",  "BMY",  "AVGO", "BR",  "CHRW",  "COG",  "CDNS", "CZR",  "CPB",  "COF",  "CAH",  "KMX",  "CCL",  "CARR", "CTLT", "CAT",  "CBOE", "CBRE", "CDW",  "CE",   "CNC",  "CNP",  "CERN", "CF",   "SCHW", "CHTR", "CVX",  "CMG",  "CB",   "CHD",  "CI",   "CINF", "CTAS", "CSCO", "C",    "CFG",  "CTXS", "CLX",  "CME",  "CMS",  "KO",   "CTSH", "CL",   "CMCSA",    "CMA",  "CAG",  "COP",  "ED",   "STZ",  "COO",  "CPRT", "GLW",  "CTVA", "COST", "CCI",  "CSX",  "CMI",  "CVS",  "DHI",  "DHR",  "DRI",  "DVA",  "DE",   "DAL",  "XRAY", "DVN",  "DXCM", "FANG", "DLR",  "DFS",  "DISCA",    "DISCK",    "DISH", "DG",   "DLTR", "D",    "DPZ",  "DOV",  "DOW",  "DTE",  "DUK",  "DRE",  "DD",   "DXC",  "EMN",  "ETN",  "EBAY", "ECL",  "EIX",  "EW",   "EA",   "EMR",  "ENPH", "ETR",  "EOG",  "EFX",  "EQIX", "EQR",  "ESS",  "EL",   "ETSY", "EVRG", "ES",   "RE",   "EXC",  "EXPE", "EXPD", "EXR",  "XOM",  "FFIV", "FB",   "FAST", "FRT",  "FDX",  "FIS",  "FITB", "FE",   "FRC",  "FISV", "FLT",  "FLIR", "FMC",  "F",    "FTNT", "FTV",  "FBHS", "FOXA", "FOX",  "BEN",  "FCX",  "GPS",  "GRMN", "IT",   "GNRC", "GD",   "GE",   "GIS",  "GM",   "GPC",  "GILD", "GL",   "GPN",  "GS",   "GWW",  "HAL",  "HBI",  "HIG",  "HAS",  "HCA",  "PEAK", "HSIC", "HSY",  "HES",  "HPE",  "HLT",  "HFC",  "HOLX", "HD",   "HON",  "HRL",  "HST",  "HWM",  "HPQ",  "HUM",  "HBAN", "HII",  "IEX",  "IDXX", "INFO", "ITW",  "ILMN", "INCY", "IR",   "INTC", "ICE",  "IBM",  "IP",   "IPG",  "IFF",  "INTU", "ISRG", "IVZ",  "IPGP", "IQV",  "IRM",  "JKHY", "J",    "JBHT", "SJM",  "JNJ",  "JCI",  "JPM",  "JNPR", "KSU",  "K",    "KEY",  "KEYS", "KMB",  "KIM",  "KMI",  "KLAC", "KHC",  "KR",   "LB",   "LHX",  "LH",   "LRCX", "LW",   "LVS",  "LEG",  "LDOS", "LEN",  "LLY",  "LNC",  "LIN",  "LYV",  "LKQ",  "LMT",  "L",    "LOW",  "LUMN", "LYB",  "MTB",  "MRO",  "MPC",  "MKTX", "MAR",  "MMC",  "MLM",  "MAS",  "MA",   "MKC",  "MXIM", "MCD",  "MCK",  "MDT",  "MRK",  "MET",  "MTD",  "MGM",  "MCHP", "MU",   "MSFT", "MAA",  "MHK",  "TAP",  "MDLZ", "MPWR", "MNST", "MCO",  "MS",   "MOS",  "MSI",  "MSCI", "NDAQ", "NTAP", "NFLX", "NWL",  "NEM",  "NWSA", "NWS",  "NEE",  "NLSN", "NKE",  "NI",   "NSC",  "NTRS", "NOC",  "NLOK", "NCLH", "NOV",  "NRG",  "NUE",  "NVDA", "NVR",  "NXPI", "ORLY", "OXY",  "ODFL", "OMC",  "OKE",  "ORCL", "OTIS", "PCAR", "PKG",  "PH",   "PAYX", "PAYC", "PYPL", "PENN", "PNR",  "PBCT", "PEP",  "PKI",  "PRGO", "PFE",  "PM",   "PSX",  "PNW",  "PXD",  "PNC",  "POOL", "PPG",  "PPL",  "PFG",  "PG",   "PGR",  "PLD",  "PRU",  "PEG",  "PSA",  "PHM",  "PVH",  "QRVO", "PWR",  "QCOM", "DGX",  "RL",   "RJF",  "RTX",  "O",    "REG",  "REGN", "RF",   "RSG",  "RMD",  "RHI",  "ROK",  "ROL",  "ROP",  "ROST", "RCL",  "SPGI", "CRM",  "SBAC", "SLB",  "STX",  "SEE",  "SRE",  "NOW",  "SHW",  "SPG",  "SWKS", "SNA",  "SO",   "LUV",  "SWK",  "SBUX", "STT",  "STE",  "SYK",  "SIVB", "SYF",  "SNPS", "SYY",  "TMUS", "TROW", "TTWO", "TPR",  "TGT",  "TEL",  "TDY",  "TFX",  "TER",  "TSLA", "TXN",  "TXT",  "TMO",  "TJX",  "TSCO", "TT",   "TDG",  "TRV",  "TRMB", "TFC",  "TWTR", "TYL",  "TSN",  "UDR",  "ULTA", "USB",  "UAA",  "UA",   "UNP",  "UAL",  "UNH",  "UPS",  "URI",  "UHS",  "UNM",  "VLO",  "VAR",  "VTR",  "VRSN", "VRSK", "VZ",   "VRTX", "VFC",  "VIAC", "VTRS", "V",    "VNO",  "VMC",  "WRB",  "WAB",  "WMT",  "WBA",  "DIS",  "WM",   "WAT",  "WEC",  "WFC",  "WELL", "WST",  "WDC",  "WU",   "WRK",  "WY",   "WHR",  "WMB",  "WLTW", "WYNN", "XEL",  "XLNX", "XYL",  "YUM",  "ZBRA", "ZBH",  "ZION", "ZTS"]

financial_data = pd.DataFrame()
for t in tickers:
    financial_data[t] = wb.DataReader(t, data_source='yahoo', start = '1995-1-1')["Adj Close"]
financial_data.to_excel("Financial Data.xlsx")

我正在使用 Datareader 收集一些股票信息。我正在获取大量信息(从 1995 年到 2021 年),然后将其导出到 Excel。我想知道是否有一种方法,比如说明天,来加快信息的更新,而不是在 Python 上从头到尾运行整个脚本,因为我明天的目标只是在整个 Excel 文件。如果我只是执行脚本,它将覆盖 Excel 文件 + 添加新的信息行。这似乎很无效,我想知道是否有一种方法可以“告诉脚本”我只是在寻找明天的信息,而不是“告诉它”以再次获取从 1995 年开始的信息。

谢谢。

【问题讨论】:

【参考方案1】:

我不知道 pandas 是如何工作的,但我会说它可以进行延迟快速加载,而且计算成本不是很高。代价高昂的是对每个加载的数据进行操作。然后我认为,在您的情况下,如果数据按日期按升序排序,那么将一个名为 timestamp_toStart 的变量第一次初始化为“1995-1-1”就足够了,然后在第一次执行之后更新为上次读取日期的最后一个值。您可以将此值保存在文件中,然后在每次重新运行脚本时重新读取并加载它。

financial_data = pd.DataFrame()
#load timestamp_toStart from the file here 
for t in tickers:
  financial_data[t] = wb.DataReader(t, data_source='yahoo', start = timestamp_toStart)["Adj Close"]
  timestamp = wb.DataReader(t, data_source='yahoo', start = timestamp_toStart)["MMM"] #Not Sure about the correct syntax
timestamp_toStart = timestamp
#Save in a file timestamp_toStart
financial_data.to_excel("Financial Data.xlsx")

【讨论】:

以上是关于Python DataReader - 更新新信息的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 Datareader 连接进行批处理

如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?

DataReader 中的 DataReader

将 pandas_datareader 存储到一个新的 csv 文件中[重复]

尝试插入、更新或删除时出错:已经有一个打开的 DataReader 与此命令关联,必须先关闭

使 SqlDataAdapter/Datareader “真正只读”