데이터 프레임 고려 df
df = pd.DataFrame(dict(A=[1, 2], B=['X', 'Y']))
df
A B
0 1 X
1 2 Y
내가 이동하면 axis=0(기본값)
df.shift()
A B
0 NaN NaN
1 1.0 X
예상대로 모든 행을 한 행 아래로 밀어 넣습니다.
하지만 내가 따라갈 때 axis=1
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
내가 예상했을 때 모든 것이 null입니다.
A B
0 NaN 1
1 NaN 2
왜 이런 일이 일어 났는지 이해합니다. 의 경우 axis=0, Pandas는 각 열이 단일 인 열 단위로 작동 하며 시작시 또는 끝에서 dtype도입 된 NaN값 을 처리하는 방법에 대한 명확한 프로토콜이 있습니다. 그러나 함께 움직일 때 한 열에서 다음 열로 axis=1의 잠재적 모호성을 도입 dtype합니다. 이 경우 열에 힘 int64을 주려고하는데 objectPandas는 값을 null로 결정합니다.
(가) 할 때 더 문제가된다 dtypes있습니다 int64및float64
df = pd.DataFrame(dict(A=[1, 2], B=[1., 2.]))
df
A B
0 1 1.0
1 2 2.0
그리고 같은 일이
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
내 질문
결과가 값과 dtype을 이동 한 상태에서 이동되는 데이터 프레임을 작성하기위한 좋은 옵션 은 무엇입니까 axis=1?
를 들어 int64/ float64케이스 결과는 같을 것이다 :
df_shifted
A B
0 NaN 1
1 NaN 2
과
df_shifted.dtypes
A object
B int64
dtype: object
보다 포괄적 인 예
df = pd.DataFrame(dict(A=[1, 2], B=[1., 2.], C=['X', 'Y'], D=[4., 5.], E=[4, 5]))
df
A B C D E
0 1 1.0 X 4.0 4
1 2 2.0 Y 5.0 5
이렇게 보일 것입니다
df_shifted
A B C D E
0 NaN 1 1.0 X 4.0
1 NaN 2 2.0 Y 5.0
df_shifted.dtypes
A object
B int64
C float64
D object
E float64
dtype: object
object
blocks>. <대신에 이것을 사용하고 참조하십시오df = pd.DataFrame(dict(A=[1, 2], B=[3., 4.], C=['X', 'Y'], D=[5., 6.], E=[7, 8], F=['W', 'Z']))
object?