我已经使用 yfinance 下载股票数据相当长一段时间了,我将最新数据添加到以前的 csv 文件中,而不是每次都下载所有数据。 由于股票分割扰乱了我的计算和曲线,我想将分割前的所有股票价值除以一个名为“分割”的常数。 我知道我可以再次下载完整的数据并从雅虎财经获取正确的数据,但我想手动下载。 我的计划是,首先将完整的数据框拆分为两个。一份是股票分割前的,另一份是剩余的。这部分正在发挥作用。后来我想再次合并两个数据框。第一列是“日期”。然后“开盘价”、“最高价”、“最低价”、“收盘价”、“调整收盘价”列应除以分割值。实际上,最后一列“体积”应该乘以相同的值。仅在股票分割之前的分割中。 我尝试以多种不同的方式使用除法操作数,但没有成功。 我不知道为什么 .dtypes 信息出现在错误之后。 如果我不使用分割线,就不会出现错误。 我的代码是:
data = pd.read_csv(stockFile, header=0)
if os.stat(stockFile).st_size > 4:
data['Date'] = pd.to_datetime(data['Date'])
frafilnavn = stockFile
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 = input('Antal nye Aktier for hver gamle? *\n'
df=data['Split'] = (data['Date'] <= Splitdato)
Splitdata=data[data['Split']]
Splitdata
print(Splitdata)
print(Splitdata.dtypes)
Splitdata.loc[data ["Open"]/Split, ['High']/Split, ['Low']/Split, ['Close']/Split, ['Adj Close']/Split, ['Volume']*Split]]
我得到这个结果:
Date Open High ... Adj Close Volume Split
0 2017-01-03 260.299988 260.799988 ... 225.361176 2859163.0 正确
1 2017-01-04 255.000000 258.399994 ... 223.095352 3566511.0 正确
2 2017-01-05 256.799988 261.000000 ... 225.884094 3296745.0 正确
3 2017-01-06 259.899994 261.700012 ... 223.966827 2742167.0 正确
4 2017-01-09 257.899994 258.899994 ... 223.182510 3214094.0 正确
…………………………
1720 2023-11-27 715.099976 719.500000 ... 710.000000 2213935.0 正确
1721 2023-11-28 700.000000 702.599976 ... 687.900024 2700601.0 正确
1722 2023-11-29 684.700012 693.000000 ... 689.400024 2189794.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 列]异常“未处理的 TypeError” 输入类型不支持 ufunc“divide”,并且根据转换规则“安全”,无法将输入安全地强制为任何受支持的类型 文件:/usr/local/lib/python3.10/dist-packages/pandas/core/ops/array_ops.py,行:171
日期 datetime64[ns]
打开float64
高浮球64
低浮动64
关闭float64
调整关闭 float64
体积浮动64
拆分布尔值
dtype:对象
任何提示表示赞赏。
要使用分割前后的值创建一个新的 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')