mirror of
https://github.com/ranaroussi/yfinance.git
synced 2024-01-29 09:38:56 +03:00
Fix 'Unalignable' error in reconstruct_intervals
This commit is contained in:
@@ -694,7 +694,7 @@ class TickerBase:
|
||||
f_tag = df_block_calib['Adj Close'] == tag
|
||||
if f_tag.any():
|
||||
div_adjusts = df_block_calib['Adj Close'] / df_block_calib['Close']
|
||||
# The loop below assumes each 1d repair is isoloated, i.e. surrounded by
|
||||
# The loop below assumes each 1d repair is isolated, i.e. surrounded by
|
||||
# good data. Which is case most of time.
|
||||
# But in case are repairing a chunk of bad 1d data, back/forward-fill the
|
||||
# good div-adjustments - not perfect, but a good backup.
|
||||
@@ -706,26 +706,30 @@ class TickerBase:
|
||||
if df_new.loc[dt, "Dividends"] != 0:
|
||||
if idx < n - 1:
|
||||
# Easy, take div-adjustment from next-day
|
||||
div_adjusts[idx] = div_adjusts.iloc[idx + 1]
|
||||
div_adjusts.iloc[idx] = div_adjusts.iloc[idx + 1]
|
||||
else:
|
||||
# Take previous-day div-adjustment and reverse todays adjustment
|
||||
div_adj = 1.0 - df_new_calib["Dividends"].iloc[idx] / df_new_calib['Close'].iloc[
|
||||
idx - 1]
|
||||
div_adjusts[idx] = div_adjusts.iloc[idx - 1] / div_adj
|
||||
div_adjusts.iloc[idx] = div_adjusts.iloc[idx - 1] / div_adj
|
||||
else:
|
||||
if idx > 0:
|
||||
# Easy, take div-adjustment from previous-day
|
||||
div_adjusts[idx] = div_adjusts.iloc[idx - 1]
|
||||
div_adjusts.iloc[idx] = div_adjusts.iloc[idx - 1]
|
||||
else:
|
||||
# Must take next-day div-adjustment
|
||||
div_adjusts[idx] = div_adjusts.iloc[idx + 1]
|
||||
div_adjusts.iloc[idx] = div_adjusts.iloc[idx + 1]
|
||||
if df_new_calib["Dividends"].iloc[idx + 1] != 0:
|
||||
div_adjusts[idx] *= 1.0 - df_new_calib["Dividends"].iloc[idx + 1] / \
|
||||
div_adjusts.iloc[idx] *= 1.0 - df_new_calib["Dividends"].iloc[idx + 1] / \
|
||||
df_new_calib['Close'].iloc[idx]
|
||||
f_close_bad = df_block_calib['Close'] == tag
|
||||
div_adjusts = div_adjusts.reindex(df_block.index, fill_value=np.nan).ffill().bfill()
|
||||
df_new['Adj Close'] = df_block['Close'] * div_adjusts
|
||||
if f_close_bad.any():
|
||||
df_new.loc[f_close_bad, 'Adj Close'] = df_new['Close'][f_close_bad] * div_adjusts[f_close_bad]
|
||||
f_close_bad_new = f_close_bad.reindex(df_new.index, fill_value=False)
|
||||
div_adjusts_new = div_adjusts.reindex(df_new.index, fill_value=np.nan).ffill().bfill()
|
||||
div_adjusts_new_np = f_close_bad_new.to_numpy()
|
||||
df_new.loc[div_adjusts_new_np, 'Adj Close'] = df_new['Close'][div_adjusts_new_np] * div_adjusts_new[div_adjusts_new_np]
|
||||
|
||||
# Check whether 'df_fine' has different split-adjustment.
|
||||
# If different, then adjust to match 'df'
|
||||
|
||||
Reference in New Issue
Block a user