我试图从 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)
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