Python 按列轴移位时,移位返回不正确的结果

Python 按列轴移位时,移位返回不正确的结果,python,pandas,dataframe,Python,Pandas,Dataframe,我正在经历一些非常奇怪的事情,不确定这是否是一个bug(希望不是)。无论如何,当我按列执行DataFrame.shift方法时,列的移位不正确或者返回的值不正确(请参见下面的输出) 有没有人知道我是否遗漏了一些东西,或者仅仅是库中的一个bug #示例2 ind=pd.日期范围('2019年1月1日',周期=5,频率=12小时') df2=pd.DataFrame({“A”:[1,2,3,4,5], “B”:[10,20,np.nan,40,50], “C”:[11,22,33,np.nan,55

我正在经历一些非常奇怪的事情,不确定这是否是一个bug(希望不是)。无论如何,当我按列执行
DataFrame.shift
方法时,列的移位不正确或者返回的值不正确(请参见下面的输出)

有没有人知道我是否遗漏了一些东西,或者仅仅是库中的一个bug

#示例2
ind=pd.日期范围('2019年1月1日',周期=5,频率=12小时')
df2=pd.DataFrame({“A”:[1,2,3,4,5],
“B”:[10,20,np.nan,40,50],
“C”:[11,22,33,np.nan,55],
“D”:[-11、-24、-51、-36、-2],
“D1”:[假]*5,
‘E’:[True,False,False,True,True]},
索引=ind)
df2.移位(频率=12H',周期=1,轴=1)
df2.移位(周期=1,轴=1)
打印(df2.shift(周期=1,轴=1))#按列移位->不正确
#打印(df2.shift(周期=1,轴=0))#正确
输出:

abcd1e
2019-01-01 00:00:00 110.011.0-11假-真
2019-01-01 12:00:00 220.022.0-24假假
2019-01-02 00:00:00 3南33.0-51假假
2019-01-02 12:00:00 440.0南-36假-真
2019-01-03 00:00:00550.055.0-2假-真
A B C D D1 E
2019-01-01 00:00:00楠楠10.01.0楠楠假
2019-01-01 12:00:00楠楠20.02.0楠楠假
2019-01-02 00:00:00楠楠3.0楠楠假
2019-01-02 12:00:00楠楠40.04.0楠楠假
2019-01-03 00:00:00楠楠50.05.0楠楠假
[以0.4s完成]
您是对的,问题是
数据帧。使用
axis=1的shift
将对象列移动到具有相同数据类型的下一列

在示例列中,
A
D
由整数填充,因此
A
移动到
D
,列
B
C
由浮点数填充,因此
B
移动到
C
,在布尔
D1
E
列中类似

解决方案应该是将所有列转换为对象,按住shift键,然后使用:


如果将
shift
axis=0
一起使用,则数据类型总是相同的,因此工作正常。

这不是我所希望的,显然它发生在任何数据类型上,而不仅仅是对象数据类型。谢谢你提供的信息。@JieJenn-答案是用更好的解决方案编辑的;)这很有魅力。谢谢。答案已解决。
df3 = df2.astype(object).shift(1, axis=1).infer_objects()
print (df3)
                      A  B     C     D  D1      E
2019-01-01 00:00:00 NaN  1  10.0  11.0 -11  False
2019-01-01 12:00:00 NaN  2  20.0  22.0 -24  False
2019-01-02 00:00:00 NaN  3   NaN  33.0 -51  False
2019-01-02 12:00:00 NaN  4  40.0   NaN -36  False
2019-01-03 00:00:00 NaN  5  50.0  55.0  -2  False

print (df3.dtypes)
A     float64
B       int64
C     float64
D     float64
D1      int64
E        bool
dtype: object