在熊猫中非自愿地将int64转换为float64

时间:2018-05-11 22:21:42

标签: python pandas dataframe

别介意以下 - 我看到了问题的原因。当然,这种转变产生了N / A.

我希望防止在将数据框水平连接到自身时发生的类型转换。我有一个数据框,其中所有列都是int64(索引是datetime64 [ns]):

df.dtypes
Out[118]: 
op        int64

我连接下一行的列(后缀为" _next")与当前行显示在同一行:

df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)

但是,连接列上的类型更改为float64:

df.dtypes
Out[122]: 
op               int64
op_next        float64

有没有办法阻止该类型转换?感谢。

2 个答案:

答案 0 :(得分:2)

这是因为df.shift(-1)有一个NaN元素,即float。这样的系列会自动上传到float。这是一个最小的例子:

df = pd.DataFrame({'op': [1, 2, 3]})
df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)

print(df)

   op  op_next
0   1      2.0
1   2      3.0
2   3      NaN

除了使用fillna填充整数和重铸之外,您无能为力。您可以在pd.concat之前或之后执行此操作:

<强>之前

df = pd.concat([df, df.shift(-1).fillna(0).astype(int).add_suffix('_next')], axis=1)

<强>后

df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)
df = df.fillna(0).astype(int)

答案 1 :(得分:1)

Shift产生一个n / a值,强制执行float64。