我有数据框df_test.head()
0 0 20.570 17.77 132.90 1326.0
1 0 19.690 21.25 130.00 1203.0
2 0 11.420 20.38 77.58 386.1
3 1 20.290 14.34 135.10 1297.0
我需要选择value=0
我做了以下事情:
MT=df_test.diagnosis==0
MT.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 568 entries, 0 to 567
Data columns (total 1 columns):
(diagnosis,) 568 non-null bool
dtypes: bool(1)
memory usage: 648.0 bytes
MT.head()
dia
0 True
1 True
2 True
3 True
4 True
但是当我尝试根据MT选择行时,它提供以下内容:
df_test[MT]
0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN
所以它把所有东西都当作NAN。
任何帮助?
答案 0 :(得分:0)
您在构建MT
或实际上df_test.diagnosis
的方式方面存在一个问题。
通常,当您拥有DataFrame
并且应用某些逻辑时,您将返回pandas.Series
。例如:
import pandas as pd
df = pd.DataFrame({'user_id': [1, 2, 3, 4, 5, 6, 7],
'val': [11, 22, 33, 44, 55, 66, 77]})
MT = df.user_id == 1
type(MT)
#pandas.core.series.Series
但是,在您的情况下,您正在做一些使其成为DataFrame
的内容当您使用DataFrame
对[]
进行切片时,行为会根据您发送的内容而有很大差异。如果你发送一个布尔值Series
,那么它会返回Series
为True
df[MT]
# user_id val
#0 1 11
但是,如果您在DataFrame
内传递[]
,那么它会屏蔽DataFrame
仅返回掩码为True
的列中的值并替换其他所有内容与NaN
。
MT_df = MT.to_frame()
type(MT_df)
#pandas.core.frame.DataFrame
df[MT_df]
# user_id val
#0 1.0 NaN
#1 NaN NaN
#2 NaN NaN
#3 NaN NaN
#4 NaN NaN
#5 NaN NaN
#6 NaN NaN
MT_df
没有列val
,因此所有条目都变为NaN
且True
内只有1 user_id
个值,因此会传递该值。其余部分被掩盖为NaN
。
最终,您需要找出导致MT
成为DataFrame
的原因,但草率的修复将是df[MT.values]