在Pandas Dataframe中用一个变量划分一些列,第一列是DateTimeArray [duplicate]

k4ymrczo  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(67)

此问题在此处已有答案

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'q')(3个答案)
How can I read inputs as numbers?(10个答案)
12天前关闭
这篇文章是编辑并提交审查10天前.

原问题:我已经下载股票数据与yfinance相当一段时间,我添加到以前的csv文件的最新数据,而不是每次下载所有数据。由于股票分割干扰我的计算和曲线,我想除以所有股票价值之前,分裂与一个常数称为“分裂”。我知道我可以再次下载完整的数据,并从雅虎财经得到正确的,但我想手动。我的计划是,首先将完整的数据框拆分为两个。一个在股票拆分之前,另一个剩余。这部分正在工作。后来我想再次合并两个数据框。第一列是“日期”。然后列“打开”,“高”,“低”,“关闭”,“Adj Close”应除以拆分值,最后一列“Volume”应乘以相同的值。仅在DataFrame的第一部分。

感谢@cottontail和@luka1156的评论,我设法让它工作。这可能不是最漂亮的解决方案,但它正在工作。首先,我只制作一个DataFrame,所有“Date”,然后我把完整的DataFrame分成两部分,一个在前,一个在后,这两个我去掉了“日期”列。在这一点上,我可以做的数学与DataFrame分割之前,因为它只有浮点值。数学运算后,我追加了分割后的一部分,最后我用concat到完整的文件没有“日期”和文件与所有“日期”。我的代码结束了这样的。为了遵循发生了什么我写的所有文件在这个过程中,但它可能没有必要。

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 = 'J'

        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)                 
                all_onlyDates = frafilnavn
                all_onlyDates += '_Complet Stock only Dates.csv'
                print ("All only Dates = ", all_onlyDates)
                data['Date'].to_csv(all_onlyDates, columns=['Date'],  index=0)
                
                df=data['Before-Split'] = (data['Date'] <= Splitdato)  
                BeforeSplitdata=data[data['Before-Split']]
                BeforeSplitdata
                print(BeforeSplitdata)
                
                before_allColumns = frafilnavn
                before_allColumns += '_Before Split.csv'
                print ("Before Split all Columns  = ", before_allColumns)
                BeforeSplitdata.to_csv(before_allColumns,  index=0)
                
                beforeValues = frafilnavn
                beforeValues += '_Before Split only Values.csv'
                print ("Before Split only Values = ", beforeValues)
                BeforeSplitdata.to_csv(beforeValues, columns=['Open',  'High',  'Low',  'Close',  'Adj Close',  'Volume'], index=0)
                
                
                df2=data['After-Split'] = (data['Date'] > Splitdato)
                AfterSplitdata = data[data['After-Split']]
                AfterSplitdata
                print(AfterSplitdata)
                
                after_allColumns = frafilnavn
                after_allColumns += '_After Split.csv'
                print ("After Split all Columns = ", after_allColumns)
                AfterSplitdata.to_csv(after_allColumns,  index=0)
                
                afterValues = frafilnavn
                afterValues += '_After Split only Values.csv'
                print ("After Split only Values = ", afterValues)
                AfterSplitdata.to_csv(afterValues, columns=['Open',  'High',  'Low',  'Close',  'Adj Close',  'Volume'], index=0)             
                
                dfbeforesplit = pd.read_csv(beforeValues,  header=0)        
     
                print(dfbeforesplit)    

                dfbeforesplit_div = dfbeforesplit/Split
                print('dfbeforesplit_div', dfbeforesplit_div)    
                dfbeforesplit_vol = dfbeforesplit_div['Volume']*Split*Split
                print('dfbeforesplit_vol', dfbeforesplit_vol)   
                
                Beforesplit_div = frafilnavn
                Beforesplit_div += '_Before Split divided Values.csv'                    
                dfbeforesplit_div.to_csv(Beforesplit_div , columns=['Open',  'High',  'Low',  'Close',  'Adj Close'],  index=0)                      

                dfdivsplit = pd.read_csv(Beforesplit_div,  header=0)

                dfcorrect = dfbeforesplit_div.join(dfbeforesplit_vol, rsuffix='Volume')
                
                
                print('Corrected values', dfcorrect)
                
                Corrected = frafilnavn
                Corrected += '_Before Split corrected Values.csv'
                print ("Before Split corrected Values = ", Corrected)
                dfcorrect = dfcorrect.rename(columns={'Volume': 'OldVolume', 'VolumeVolume': 'Volume'})
                dfcorrect.to_csv(Corrected, columns=['Open',  'High',  'Low',  'Close',  'Adj Close',  'Volume'],  index=0)  
            
                dfcorrectsplit = pd.read_csv(Corrected,  header=0)
                Corrected = frafilnavn
                Corrected += '_Before Split corrected Values.csv'
                print ("Indlæst fil er = ", Corrected)    

                
                frafil = afterValues
                print ("frafil = ", frafil)
                       
                
                tilfil = Corrected
                print ("tilfil = ", tilfil)
                
                bckupfil = tilfil
                bckupfil += '_bckup.csv'                    
                 
                file_in = frafil #'in.csv'
                file_out = tilfil #'out.csv'
                copyfile(tilfil, bckupfil)


                with open(file_in,  "r" ) as f_input, open(file_out, "a") as f_output : #, open(file_temp, "w") as f_temp:
                    csv_input = csv.reader(f_input)

                    csv.writer(f_output).writerows(itertools.islice(csv_input, 1, 500))
                    
                with open(tilfil) as csvfile:
                    print(tilfil)

                    KompletuDato = Corrected
                    
                    data1 = pd.read_csv(KompletuDato,  header=0)
                    print(KompletuDato)
                    data2 = pd.read_csv(all_onlyDates,  header=0)
                
                    resultFile = stockFile
                    resultFile += '_færdig.csv'
                    result = pd.concat([data2, data1], axis=1) 
                    result.to_csv(resultFile,  index=0)
                    print(result)
                    os.rename(resultFile, FinishFile)

字符串
在目录中,我得到了一个文件,与我调用的名称相同,但与值更正。我也有一个备份文件的原始以防万一。我会尝试从luka 1156最后的意见,但这里是我做了什么。

mcdcgff0

mcdcgff01#

要创建一个新的DataFrame与之前和之后的分裂值,你可以这样做:

df = df.set_index('Date')
split_n = 2
dfsplit = df/split_n 
dfsplit['Volume'] = dfsplit['Volume']*split_n*split_n

df1 = df.join(dfsplit, rsuffix='_Split')

字符串

相关问题