Python Concat:无法从重复轴重新索引

Python Concat:无法从重复轴重新索引,python,pandas,Python,Pandas,我正在尝试concat一些timeseries。对于某些数据集,这是有效的。我的timeseries使用date作为索引。现在,对于一些ts.size相同的数据集,pd.concat可以完美地工作。但是当时间序列中的大小不同时,我得到一个错误:无法从重复轴重新编制索引。所以我假设这是由于大小的差异造成的。如果是这样,我是否应该用零填充时间序列 ts.head(): 我已经被困在这一天,所以任何帮助都是感激的。谢谢 这是我发布的原始问题,您可以看到我的代码:。我只是想知道这是否是个问题 我的代码:

我正在尝试
concat
一些
timeseries
。对于某些数据集,这是有效的。我的
timeseries
使用
date
作为索引。现在,对于一些
ts.size
相同的数据集,
pd.concat
可以完美地工作。但是当
时间序列中的
大小不同时,我得到一个错误:
无法从重复轴重新编制索引。所以我假设这是由于
大小的差异造成的。如果是这样,我是否应该用零填充
时间序列

ts.head()

我已经被困在这一天,所以任何帮助都是感激的。谢谢 这是我发布的原始问题,您可以看到我的代码:。我只是想知道这是否是个问题

我的代码:

def get_adj_nav(self, fund_id):
    df_nav = read_frame(
        super(__class__, self).filter(fund__id=fund_id, nav__gt=0).exclude(fund__account_class=0).order_by(
            'valuation_period_end_date'), coerce_float=True,
        fieldnames=['income_payable', 'valuation_period_end_date', 'nav', 'outstanding_shares_par'],
        index_col='valuation_period_end_date')
    df_dvd, skip = self.get_dvd(fund_id=fund_id)
    df_nav_adj = calculate_adjusted_prices(
        df_nav.join(df_dvd).fillna(0).rename_axis({'payout_per_share': 'dividend'}, axis=1), column='nav')
return df_nav_adj

def json_total_return_table(request, fund_account_id):
ts_list = []
for fund_id in Fund.objects.get_fund_series(fund_account_id=fund_account_id):
    if NAV.objects.filter(fund__id=fund_id, income_payable__lt=0).exists():
        ts = NAV.objects.get_adj_nav(fund_id)['adj_nav']
        ts.name = Fund.objects.get(id=fund_id).account_class_description
        ts_list.append(ts.copy())
        print(ts)
    df_adj_nav = pd.concat(ts_list, axis=1) # ====> Throws error
    cols_to_datetime(df_adj_nav, 'index')
    df_adj_nav = ffn.core.calc_stats(df_adj_nav.dropna()).to_csv(sep=',')

所以我认为我说的是正确的,它失败的原因是由于大小不同。所以我改用了
merge
。 我只是简单地更改了这一行:
df_adj_nav=pd.concat(ts_list,axis=1)

到此行:
df_adj_nav=reduce(lambda x,y:pd.merge(x,y,left_index=True,right_index=True,how='outer'),ts_list)


感谢@HodgePodge的提示:)

你能粘贴一些代码吗?@cᴏʟᴅsᴘᴇᴇᴅ 当然done@anderish我想你回答了你自己的问题。由于要沿axis=1进行连接(添加更多列),因此需要保持“列”长度不变。如果这个标准不到位,concat特性将不知道如何填充缺失的数据。您可能需要考虑的另一种模式是<代码> MurGe()< <代码> >
def get_adj_nav(self, fund_id):
    df_nav = read_frame(
        super(__class__, self).filter(fund__id=fund_id, nav__gt=0).exclude(fund__account_class=0).order_by(
            'valuation_period_end_date'), coerce_float=True,
        fieldnames=['income_payable', 'valuation_period_end_date', 'nav', 'outstanding_shares_par'],
        index_col='valuation_period_end_date')
    df_dvd, skip = self.get_dvd(fund_id=fund_id)
    df_nav_adj = calculate_adjusted_prices(
        df_nav.join(df_dvd).fillna(0).rename_axis({'payout_per_share': 'dividend'}, axis=1), column='nav')
return df_nav_adj

def json_total_return_table(request, fund_account_id):
ts_list = []
for fund_id in Fund.objects.get_fund_series(fund_account_id=fund_account_id):
    if NAV.objects.filter(fund__id=fund_id, income_payable__lt=0).exists():
        ts = NAV.objects.get_adj_nav(fund_id)['adj_nav']
        ts.name = Fund.objects.get(id=fund_id).account_class_description
        ts_list.append(ts.copy())
        print(ts)
    df_adj_nav = pd.concat(ts_list, axis=1) # ====> Throws error
    cols_to_datetime(df_adj_nav, 'index')
    df_adj_nav = ffn.core.calc_stats(df_adj_nav.dropna()).to_csv(sep=',')