【问题标题】:Concatenating Two Pandas DataFrames with the same length extends the length of the resulting DataFrame连接两个相同长度的 Pandas DataFrame 会扩展结果 DataFrame 的长度
【发布时间】:2017-12-02 11:39:12
【问题描述】:

我有两个要连接在一起的 DataFrame。 df_output_norm 是我想要获取的数据框。 X_test_minmax 有 81732 行和 6 列,y_test 有 81732 行和 1 列。这应该是一个简单的连接,但是当我连接它时,结果大小是 (147158, 7)

df_output_norm = pd.DataFrame()
df_output_norm = pd.concat([pd.DataFrame(X_test_minmax), pd.DataFrame(y_test)], axis=1)

print(df_output_norm.shape)
print(df_output_norm['label'].shape)
print(X_test_minmax.shape)
print(y_test.shape)

输出是
(147158, 7)
(147158,)
(81732, 6)
(81732,)

列数是对的,只是最后一列的行数不对。我查看了数据,只有最后一列“标签”被扩展,即 y_test 列。来自 X_test_minmax 的前 6 列具有正确的行长。为什么会这样?

【问题讨论】:

    标签: python pandas dataframe python-3.5


    【解决方案1】:

    相当老的问题,但我来到这里寻找解决同一问题的方法。我发现这是因为行索引不匹配,因为函数将尝试连接它们(很可能你已经通过采样将你的 dfs 从更大的一个中分块了)。

    试试

    X_test_minmax.reset_index(inplace=True,drop=True)
    y_test.reset_index(inplace=True,drop=True)
    df_output_norm = pd.concat([pd.DataFrame(X_test_minmax), pd.DataFrame(y_test)],axis=1)

    【讨论】:

      【解决方案2】:

      如果 ignore_index =True 不起作用,这可能是由重复的列名引起的:第一个数据帧中的一个列名与第二个数据帧的列名相同。更改列名可能会有所帮助。

      【讨论】:

        【解决方案3】:

        也许索引阻止了您正在寻找的结果。试试

        f_output_norm = pd.concat([pd.DataFrame(X_test_minmax), pd.DataFrame(y_test)],
                                  axis=1, 
                                  ignore_index=True)
        

        忽略连接轴上的索引。

        【讨论】:

        • 这不起作用,您还有其他建议吗?我查看了文档,这是一个非常奇怪的错误,似乎没有人遇到过
        • 你能用你制造的玩具 DF 复制结果吗?尝试创建两个具有 4 行和相同列数的 DF,并对其进行测试....如果您可以复制它,请使用这些 DF 编辑您的问题,以便我们可以尝试。
        猜你喜欢
        • 1970-01-01
        • 2022-08-05
        • 2016-09-01
        • 1970-01-01
        • 2017-12-16
        • 2018-01-23
        • 2014-10-10
        • 1970-01-01
        • 2023-04-07
        相关资源
        最近更新 更多