shift
将我的列从整型转换为浮点型。结果np.nan
仅为浮点型。有什么方法可以保持移位列为整型吗?
df = pd.DataFrame({"a":range(5)})
df['b'] = df['a'].shift(1)
df['a']
# 0 0
# 1 1
# 2 2
# 3 3
# 4 4
# Name: a, dtype: int64
df['b']
# 0 NaN
# 1 0
# 2 1
# 3 2
# 4 3
# Name: b, dtype: float64
6条答案
按热度按时间a64a0gku1#
0.24以下Pandas解:
问题是你得到的
NaN
值是float
,所以int
被转换为float
-参见na类型的促销。一种可能的解决方案是将
NaN
值转换为0
之类的某个值,然后可能转换为int
:panda 0.24+的解决方案-检查
Series.shift
:填充值对象,可选
用于新引入的丢失值的标量值。缺省值取决于self的数据类型。对于数值数据,使用np.nan。对于日期时间、时间增量或周期数据等,使用NaT。对于扩展数据类型,使用self.dtype.na_value。
在版本0.24.0中进行了更改。
zhte4eai2#
另一个解决方案从panda版本
0.24.0
开始:只需提供参数fill_value
的值:zte4gxcn3#
可以通过将
0
预先添加到列a
的所有元素(除了最后一个元素)来构造numpy
数组t3irkdon4#
从Pandas1.0.0开始,我相信你还有另一个选择,那就是首先使用convert_dtypes。这会将 Dataframe 列转换为支持pd.NA的数据类型,从而避免了NaN的问题。
yv5phkfx5#
另一种解决方案是使用replace()函数和类型转换
djp7away6#
我不喜欢其他可能改变原始数据类型的答案,如果你的数据中有浮点数,字符串呢?既然我们不需要第一行,为什么不跳过它呢?
我将保留所有的dtype并进行强制转换: