为什么此代码会导致数据帧长度超过 2000 列?

问题描述 投票:0回答:1

我试图从 pandas 数据框中过滤掉具有最高 MAD 值的 2000 列,但是当我运行此代码时,它会导致数据框大于 2000 列(确切地说是 3556 列)。我通过将 2000 更改为 1999 来确认这不是舍入错误。为什么此代码会导致数据帧长度超过 2000 列?

print(split_df.shape)
mad_values = split_df.mad()
top_columns = mad_values.nlargest(2000).index
split_df = split_df[top_columns]
print(split_df.shape)

这是输出:

(580, 60660)

(580, 3556)

pandas
1个回答
0
投票

顺便说明一下,

mad
1.5.0 中已被 pandas/pull/46707
 
弃用
。所以我假设您使用的是该版本的旧版本(例如
1.4.4
)。为了回答你的问题,我看到的唯一解释是“原始数据帧具有重复的标题”

这是一个最小的可重现示例:

# pd.__version__ # 1.4.4

split_df = pd.DataFrame(np.arange(30).reshape(-1, 5), columns=[*"AABCA"])

    A   A   B   C   A
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24
5  25  26  27  28  29
split_df.columns.is_unique # False

现在,使用您的代码后,看看我们最终如何得到

7
cols (
>3
) :

# this is your code

print(split_df.shape) # (6, 5)

mad_values = split_df.mad()
top_columns = mad_values.nlargest(3).index
split_df = split_df[top_columns]

print(split_df.shape) # (6, 7)

中级疯狂:

A    7.5  # << 1
A    7.5  # << 2
B    7.5
C    7.5
A    7.5  # << 3
dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.