我已经用 yfinance 下载股票数据很长一段时间了,我将最新数据添加到以前的 csv 文件中,而不是每次都下载所有数据。 由于股票分割扰乱了我的计算和曲线,我想将分割前的所有股票价值除以一个名为“分割”的常数。 我知道我可以再次下载完整的数据并从雅虎财经获取正确的数据,但我想手动下载。 我的计划是,首先将完整的数据框拆分为两个。一份是股票分割前的,另一份是剩余的。这部分正在发挥作用。后来我想再次合并两个数据框。第一列是“日期”。然后,“开盘价”、“最高价”、“最低价”、“收盘价”、“调整收盘价”列应除以分割值,最后一列“成交量”应乘以相同的值。仅在数据帧的第一部分中。 将输入更改为浮动并使用建议后,我仍然遇到一些问题。
我的代码是:
data = pd.read_csv(stockFile, header=0)
if os.stat(stockFile).st_size > 4:
data['Date'] = pd.to_datetime(data['Date'])
frafilnavn = stockFile
# frafilnavn=frafilnavn.strip(stock)
print ("frafilnavn = ", frafilnavn)
Rigtige = str(input('Er dette den rigtige fil? J/N *\n'))
while True:
if Rigtige == 'J':
print('Indtast tidspunkt for Aktiesplit yyyy,m,d ')
Splitdato = year,month,day = input().split(',')
Splitdato = datetime.datetime(year = int(year), month = int(month), day = int(day))
Split = float(input('Antal nye Aktier for hver gamle? *\n'))
print("value of Split: ",Split)
df=data['Split'] = (data['Date'] <= Splitdato)
Splitdata=data[data['Split']]
Splitdata
df = data[data['Split']]
print(df)
dfsplit = df/Split
dfsplit['Volume'] = dfsplit['Volume']*Split*Split
df1 = df.set_index('Date').join(dfsplit.set_index('Date'), rsuffix='_Split')
我得到这个结果:
Date Open High ... Adj Close Volume Split
0 2017-01-03 260.299988 260.799988 ... 225.361176 2859163.0 正确 ………………………… 1723 2023-11-30 689.200012 695.500000 ... 695.500000 9754876.0 正确 1724 2023-12-01 692.000000 698.700012 ... 698.700012 2600473.0 正确
[1725 行 x 8 列] 异常“未处理的类型错误” 无法使用此索引类型执行 truediv:DatetimeArray 文件:/usr/local/lib/python3.10/dist-packages/pandas/core/ops/invalid.py,行:55
如何从划分中排除 DateTimeArray?
要使用分割前后的值创建一个新的 DataFrame,您可以这样做:
split_n = 2
dfsplit = df/split_n
dfsplit['Volume'] = dfsplit['Volume']*split_n*split_n
df1 = df.set_index('Date').join(dfsplit.set_index('Date'), rsuffix='_Split')