pandas为什么int64 - float64列减法产生NaN的

时间:2015-12-16 18:24:43

标签: python pandas nan

我对两列pandas减法的结果感到困惑。当我减去两个float64和int64列时,它会产生几个NaN条目。为什么会这样?可能是造成这种奇怪行为的原因是什么?

最终更新:正如N.Wouda指出的那样,我的问题是索引列不匹配。

Y_predd.reset_index(drop=True,inplace=True)
Y_train_2.reset_index(drop=True,inplace=True)

解决了我的问题

更新2 :看起来我的索引列不匹配,这是有道理的,因为它们都是从同一数据中采样的。如何使用新的索引颜色“重新开始”?

更新Y_predd- Y_train_2.astype('float64')也会产生NaN值。我很困惑,为什么这没有引起错误。它们的大小相同。为什么这会产生NaN?

In [48]: Y_predd.size
Out[48]: 182527

In [49]: Y_train_2.astype('float64').size
Out[49]: 182527

错误的原始文档:

In [38]: Y_train_2
Out[38]: 
66419     0
2319      0
114195    0
217532    0
131687    0
144024    0
94055     0
143479    0
143124    0
49910     0
109278    0
215905    1
127311    0
150365    0
117866    0
28702     0
168111    0
64625     0
207180    0
14555     0
179268    0
22021     1
120169    0
218769    0
259754    0
188296    1
63503     1
175104    0
218261    0
35453     0
         ..
112048    0
97294     0
68569     0
60333     0
184119    1
57632     0
153729    1
155353    0
114979    1
180634    0
42842     0
99979     0
243728    0
203679    0
244381    0
55646     0
35557     0
148977    0
164008    0
53227     1
219863    0
4625      0
155759    0
232463    0
167807    0
123638    0
230463    1
198219    0
128459    1
53911     0
Name: objective_for_classifier, dtype: int64

In [39]: Y_predd
Out[39]: 
0         0.00
1         0.48
2         0.04
3         0.00
4         0.48
5         0.58
6         0.00
7         0.00
8         0.02
9         0.06
10        0.22
11        0.32
12        0.12
13        0.26
14        0.18
15        0.18
16        0.28
17        0.30
18        0.52
19        0.32
20        0.38
21        0.00
22        0.02
23        0.00
24        0.22
25        0.64
26        0.30
27        0.76
28        0.10
29        0.42
          ... 
182497    0.60
182498    0.00
182499    0.06
182500    0.12
182501    0.00
182502    0.40
182503    0.70
182504    0.42
182505    0.54
182506    0.24
182507    0.56
182508    0.34
182509    0.10
182510    0.18
182511    0.06
182512    0.12
182513    0.00
182514    0.22
182515    0.08
182516    0.22
182517    0.00
182518    0.42
182519    0.02
182520    0.50
182521    0.00
182522    0.08
182523    0.16
182524    0.00
182525    0.32
182526    0.06
Name: prediction_method_used, dtype: float64

In [40]: Y_predd - Y_tr
Y_train_1  Y_train_2  

In [40]: Y_predd - Y_train_2
Out[41]: 
0          NaN
1          NaN
2         0.04
3          NaN
4         0.48
5          NaN
6         0.00
7         0.00
8          NaN
9          NaN
10         NaN
11        0.32
12       -0.88
13       -0.74
14        0.18
15         NaN
16         NaN
17         NaN
18         NaN
19        0.32
20        0.38
21        0.00
22        0.02
23        0.00
24        0.22
25         NaN
26        0.30
27         NaN
28        0.10
29        0.42
          ... 
260705     NaN
260706     NaN
260709     NaN
260710     NaN
260711     NaN
260713     NaN
260715     NaN
260716     NaN
260718     NaN
260721     NaN
260722     NaN
260723     NaN
260724     NaN
260725     NaN
260726     NaN
260727     NaN
260731     NaN
260735     NaN
260737     NaN
260738     NaN
260739     NaN
260740     NaN
260742     NaN
260743     NaN
260745     NaN
260748     NaN
260749     NaN
260750     NaN
260751     NaN
260752     NaN
dtype: float64

1 个答案:

答案 0 :(得分:1)

在此发布,以便我们可以从评论中结束这个问题:

您确定每个数据框的索引范围相同吗?

您可以按None重置两个帧的索引,然后按原样减去帧。这个过程应该产生所需的输出。