python – pandas concat用NaN填充非对齐索引

问题

我连接了两个int类型的系列,我得到的数据帧是float类型.发生这种情况是因为系列的索引没有对齐,当连接发生时,大熊猫填补了NaN的空白.但是,NaN被认为是一个浮点数,不幸的是,我将所有的int都转换为浮点数.

我的问题是,我怎样才能填补其他不会将我的注册转换为浮点数的空白?

MCV

import pandas as pd

s1 = pd.Series([1],index=['A'])
s2 = pd.Series([1],index=['B'])

print "s1 type: {} | s2 type: {}\n".format(s1.dtype,s2.dtype)

df = pd.concat([s1,s2],axis=1)
print df,"\n"
print df.dtypes

打印:

s1 type: int64 | s2 type: int64

     0    1
A  1.0  NaN
B  NaN  1.0 

0    float64
1    float64
dtype: object

解决方法

首先,dtype转换是由于NaN不能用整数表示,所以选择float dtype.

其次,这将成为个人选择,当这种情况发生时该怎么做,这取决于你,没有正确的选择.

例如,我们可以使用任意值(如0或-1)来填充,然后我们可以使用astype(int)来回转类型:

In [21]:
df.fillna(0).astype(int)

Out[21]:
   0  1
A  1  0
B  0  1

但这可能不是您想要的,您可能决定使用dropna删除这些行,但这可能意味着您丢失了有价值的信息,如果您正在进行某种机器学习或其他分析,这些信息可能是至关重要的.

因此,您可能决定要将这些列/行设置为最小值/最大值/平均值或中值,但如果列值对其他列具有依赖性,则会产生严重后果,例如我们将所有缺失值设置为最小值/ max然后该值会使预测模型偏差,因为它会丢失entropy/information,因为如果您有大量缺失值,那么您的数据会偏向最小/最大.在这种情况下,我个人认为工作正常.

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...