我连接了两个int类型的系列,我得到的数据帧是float类型。发生这种情况是因为系列的索引没有对齐,当连接发生时,大熊猫填补了NaN的空白。但是,NaN被认为是一个浮点数,不幸的是,我将所有的int都转换为浮点数。
我的问题是,如何填补其他不能将我的注册转换为浮点数的空白?
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
答案 0 :(得分:1)
首先dtype
转换归因于NaN
无法在整数中表示,因此选择float
dtype。
其次,这将成为个人选择,当这种情况发生时该做什么并且取决于你,没有正确的选择。
例如,我们可以将fillna
与0
或-1
等任意值一起使用,然后我们可以使用astype(int)
强制转换类型:
In [21]:
df.fillna(0).astype(int)
Out[21]:
0 1
A 1 0
B 0 1
但这可能不是您想要的,您可能决定使用dropna
删除这些行,但这可能意味着您丢失了有价值的信息,如果您正在进行某种机器学习或其他分析,这些信息可能至关重要
因此,您可能决定要将这些列/行设置为最小值/最大值/平均值或中值,但如果列值依赖于其他列,则会产生严重后果,例如我们设置所有缺失值到最小值/最大值然后该值会使预测模型失去entropy/information,因为如果您有大量缺失值,那么您的数据会偏向最小值/最大值。就个人而言,我发现这意味着工作正常。