2014-09-16 2 views
1

데이터 프레임의 열 순서를 바꿀 수 있습니까?변경 팬더 데이터 프레임 열 순서 변경

예 인 경우 복사하는 것보다 빠르지 않습니까? 나는 1 억 개의 행을 가진 대형 데이터 프레임으로 작업하고 있습니다. How to change the order of DataFrame columns?

+0

얼마나 자주해야합니까? 왜 열의 순서가 중요합니까? 'newdf = df [new_column_order]'와 같은 일을하면 얼마나 걸릴까요? – acushner

답변

3

는 복사본을 만들지 않고이 작업을 수행하는 쉬운 방법 그들의 없습니다 :

나는 사본 순서를 변경하는 방법을 참조하십시오. 이론적으로 단일 dtype 만있는 경우 (또는 dtypes를 변경하는 레이블에서 WITHIN 열만 변경하는 경우) 가능합니다. 그러나 상당히 복잡하기 때문에 구현되지 않습니다.

그건 그렇고 조심하면 그렇게 할 수 있습니다. 싱글 dtyped 프레임에서만 이것을 수행해야합니다 (미리 경고했습니다).

In [22]: df = DataFrame(np.random.randn(5,3),columns=list('ABC')) 

In [23]: df 
Out[23]: 
      A   B   C 
0 -0.696593 -0.459067 1.935033 
1 1.783658 0.612771 1.553773 
2 -0.572515 0.634174 0.113974 
3 -0.908203 1.454289 0.509968 
4 0.776575 1.629816 1.630023 

df 인 경우, df.values는 VIEW (물론 당신이보기 자체가 단일 dtyped 프레임을 부속 선택 가능)을지지 않습니다 멀티 dtyped. 또 다른 메모, 이것이 항상보기로 나올 가능성은 없습니다. 그것은 당신이하고있는 일, YMMV에 달려 있습니다.

df.values.take([2,0,1],axis=1)은 동일한 결과를 제공하지만 사본입니다.

In [24]: df2 = DataFrame(df.values[:,[2,0,1]],columns=list('ABC')) 

In [25]: df2 
Out[25]: 
      A   B   C 
0 1.935033 -0.696593 -0.459067 
1 1.553773 1.783658 0.612771 
2 0.113974 -0.572515 0.634174 
3 0.509968 -0.908203 1.454289 
4 1.630023 0.776575 1.629816 

우리는 당신이 다음 (예를 들어 다른 플로트 열) DF2에 할당하는 경우, 당신은 사본을 트리거

In [26]: df2.values.base 
Out[26]: 
array([[ 1.93503267, 1.55377291, 0.1139739 , 0.5099681 , 1.63002264], 
     [-0.69659276, 1.78365777, -0.5725148 , -0.90820288, 0.7765751 ], 
     [-0.45906706, 0.61277136, 0.63417392, 1.45428912, 1.62981613]]) 

참고 원래 값에 볼 수 있습니다. 그래서 당신은 이것을 극도로 조심해야합니다.

다른 프레임보기에서 생성하는 것은 거의 메모리가 필요하지 않으며 포인터 일 뿐이므로 매우 빠릅니다.