使用带有变量的股票值划分 Pandas Dataframe 中的一些列。第一列是 DatetimeArray [重复]

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

我已经用 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?

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.