问题
我连接了两个类型为 int 的系列,而我返回的数据帧是 float 类型。发生这种情况是因为系列的索引未对齐,并且当发生连接时,pandas 会用 NaN 填充空白。然而,NaN 被认为是一个 float ,不幸的是将我所有的整数都转换为 float 。
问题
我的问题是,如何用其他不会将我的整数转换为 float 的东西来填补空白?
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。
其次,这将成为个人选择,当发生这种情况时该怎么做,这取决于您,没有正确的选择。
例如,我们可以将 fillna
与任意值一起使用,例如 0
或 -1
然后我们可以使用astype(int)
:
In [21]:
df.fillna(0).astype(int)
Out[21]:
0 1
A 1 0
B 0 1
但这可能不是您想要的,您可能决定使用 dropna
删除这些行,但这可能意味着您丢失了有值(value)的信息,如果您正在进行某种机器学习,这些信息可能是至关重要的或其他分析。
因此您可能决定要将这些列/行设置为最小值/最大值/平均值或中值,但如果列值依赖于其他列,这可能会产生严重后果,例如我们设置所有缺失值到最小值/最大值,但随后该值会使预测模型产生偏差,因为它会丢失 entropy/information因为如果您有大量缺失值,那么您的数据就会偏向于最小值/最大值。就我个人而言,在这些情况下我觉得工作正常。
关于python - pandas concat 用 NaN 填充非对齐索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360929/