Python 按列轴移位时,移位返回不正确的结果
我正在经历一些非常奇怪的事情,不确定这是否是一个bug(希望不是)。无论如何,当我按列执行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
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