考虑以下数据框:
b c d e f g h
0 6.25 2018-04-01 True NaN 7 54.0 64.0
1 32.50 2018-04-01 True NaN 7 54.0 64.0
2 16.75 2018-04-01 True NaN 7 54.0 64.0
3 29.25 2018-04-01 True NaN 7 54.0 64.0
4 21.75 2018-04-01 True NaN 7 54.0 64.0
5 21.75 2018-04-01 True True 7 54.0 64.0
6 7.75 2018-04-01 True True 7 54.0 64.0
7 23.25 2018-04-01 True True 7 54.0 64.0
8 12.25 2018-04-01 True True 7 54.0 64.0
9 30.50 2018-04-01 True NaN 7 54.0 64.0
(复制并粘贴并使用df = pd.read_clipboard()
创建数据框)
最初寻找中位数没有问题:
df.median()
b 21.75
d 1.00
e 1.00
f 7.00
g 54.00
h 64.00
dtype: float64
然而,如果删除了一列,然后找到median
,那么列e
的中位数会消失:
new_df = df.drop(columns=['b'])
new_df.median()
d 1.0
f 7.0
g 54.0
h 64.0
dtype: float64
这种行为有点出人意料,但仅针对列e查找中位数仍然有效:
new_df['e'].median()
1.0
使用 skipna=False
没有任何区别:
new_df.median(skipna=False)
d 1.0
f 7.0
g 54.0
h 64.0
dtype: float64
它适用于原始数据框:df.median(skipna=False)
b 21.75
d 1.00
e NaN
f 7.00
g 54.00
h 64.00
dtype: float64
列e
在df
和new_df
中的数据类型均为object
,两个数据帧之间唯一的区别是new_df
没有列b
。把列添加回new_df
并不能解决这个问题。只有当第一列b
被删除时才会出现这个问题。如果列e
的数据类型是浮点或整数,则不会发生此情况。
这种行为存在于pandas==0.22.0
和pandas==0.24.1
中。
现在有一个开放的GitHub问题供任何人尝试解决!
df ['c'] = 1
时,删除“b”没有任何问题。 - ALollzdf.e=1
,则不会发生消失。 - Alex Yudf.c=1
或df.e=1
替换列c
或e
- 之后不会发生任何神秘事件。非常有趣。 - Alex Yudf.e
中的object
列计算中位数时出现了问题。 - Alex Yunew_df
,使用new_df = pd.read_clipboard()
进行了复制。我得到的结果与new_df = df.drop(columns=['b'])
完全相同。我猜测是数据结构引起了错误(我怀疑是复制/查看问题)。GitHub上已经有问题了吗? - Adrien Pacifico