pandas shift将我的列从整数转换为float.

use*_*167 13 python numpy pandas

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
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 13

问题是你获得的NaN价值是什么float,所以int转换为float- 参见na型促销.

一种可能的解决方案是将NaN值转换为某个值0,然后可以转换为int:

df = pd.DataFrame({"a":range(5)})
df['b'] = df['a'].shift(1).fillna(0).astype(int)
print (df)
   a  b
0  0  0
1  1  0
2  2  1
3  3  2
4  4  3
Run Code Online (Sandbox Code Playgroud)


小智 6

从 pandas 版本开始的另一个解决方案0.24.0:只需为参数提供一个值fill_value

df['b'] = df['a'].shift(1, fill_value=0)
Run Code Online (Sandbox Code Playgroud)