python - pandas 中 int64 到 float64 的非自愿转换

标签 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

有没有办法阻止这种类型转换?谢谢。

最佳答案

发生这种情况是因为 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/

相关文章:

python - 使用 Python 在 PDF 中放置垂直或旋转的文本

python - 如何加快将数据帧导入 pandas 的速度

Python Pandas 数据框到 XML

python - 合并两个数据帧并分别添加 resp 列

python - 如何使用 PySide 获取 Maya 主窗口指针?

python - 在多行上进行相同的更改(尝试除外) - python

python - Windows Defender 将 Python EXE 检测为木马

python - 提高 Pandas 行最近邻居的性能

python - 有条件地从 pandas 数据框中删除行

python - 为什么我无法将列名称添加到数据框中?