此问题在此处已有答案:
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最后的意见,但这里是我做了什么。
1条答案
按热度按时间mcdcgff01#
要创建一个新的DataFrame与之前和之后的分裂值,你可以这样做:
字符串