别介意以下 - 我看到了问题的原因。当然,这种转变产生了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
有没有办法阻止该类型转换?感谢。
答案 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。