别介意下面的——我明白问题的原因了。这种转变当然会产生 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
有没有办法阻止这种类型转换?谢谢。
最佳答案
发生这种情况是因为 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)
关于python - pandas 中 int64 到 float64 的非自愿转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50300983/