在股票分割的情况下将 Pandas Dataframe 中的一些列与股票值分开

问题描述 投票:0回答:1

我已经使用 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:对象

任何提示表示赞赏。

python pandas dataframe division stockquotes
1个回答
0
投票

要使用分割前后的值创建一个新的 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')
© www.soinside.com 2019 - 2024. All rights reserved.