[python] 10 Minutes to pandas - 선택
선택 Selection
선택 및 설정을 위한 표준 Python / Numpy 표현 방식은 직관적이며 양방향 작업, 생산적 코드에 편리하지만, padas 데이터 최적화 방법 인
.at, .iat, .loc, .iloc 및 .ix
를 권장합니다.
인덱싱 문서보기
얻기
df.A와 같이 Series를 제공하는 단일 열 선택
In [23]: df['A']
Out[23]:
2013-01-01 0.469112
2013-01-02 1.212112
2013-01-03 -0.861849
2013-01-04 0.721555
2013-01-05 -0.424972
2013-01-06 -0.673690
Freq: D, Name: A, dtype: float64
행을 분할하는 [ ]
를 통해 선택합니다.
In [24]: df[0:3]
Out[24]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
In [25]: df['20130102':'20130104']
Out[25]:
A B C D
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
라벨 별 선택
레이블 별 선택에서 자세한 내용을 확인 할 수 있있습니다.
라벨을 사용하여 row 정보 얻기
In [26]: df.loc[dates[0]]
Out[26]:
A 0.469112
B -0.282863
C -1.509059
D -1.135632
Name: 2013-01-01 00:00:00, dtype: float64
레이블로 다중 축에서 선택하기
In [27]: df.loc[:,['A','B']]
Out[27]:
A B
2013-01-01 0.469112 -0.282863
2013-01-02 1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04 0.721555 -0.706771
2013-01-05 -0.424972 0.567020
2013-01-06 -0.673690 0.113648
양쪽 끝점을 포함하여 라벨별 선택
In [28]: df.loc['20130102':'20130104',['A','B']]
Out[28]:
A B
2013-01-02 1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04 0.721555 -0.706771
반환 된 객체의 차원 축소 (하나의 차원이 줄어듦)
In [29]: df.loc['20130102',['A','B']]
Out[29]:
A 1.212112
B -0.173215
Name: 2013-01-02 00:00:00, dtype: float64
스칼라 값 얻기
In [30]: df.loc[dates[0],'A']
Out[30]: 0.46911229990718628
스칼라에 빠르게 접근하기 (이전 내용과 동일) at
을 사용하여 접근
In [31]: df.at[dates[0],'A']
Out[31]: 0.46911229990718628
위치 별 선택
위치 별 선택에서 더보기
전달된 정수를 통해 위치를 선택합니다.
In [32]: df.iloc[3]
Out[32]:
A 0.721555
B -0.706771
C -1.039575
D 0.271860
Name: 2013-01-04 00:00:00, dtype: float64
정수 분할은 numpy / python과 유사하게 동작합니다.
In [33]: df.iloc[3:5,0:2]
Out[33]:
A B
2013-01-04 0.721555 -0.706771
2013-01-05 -0.424972 0.567020
위와 같은 dataframe이 있는 경우, df.iloc[3:5,0:2]
를 실행하면,
첫번째 파라미터는 데이터의 row 를 의미합니다. 0부터 시작한 인덱스는 3인 2016-09-08 을 의미하며, 3:5 이므로 4까지 포함됩니다.
두번째 파라미터는 데이터의 column을 의미합니다. 0:2 이므로 Open, High 를 의미합니다.
numpy / python 스타일과 비슷한 방법으로 정수 리스트를 사용하여 위치를 지정합니다.
In [34]: df.iloc[[1,2,4],[0,2]]
Out[34]:
A C
2013-01-02 1.212112 0.119209
2013-01-03 -0.861849 -0.494929
2013-01-05 -0.424972 0.276232
명시적으로 행 분할하기
In [35]: df.iloc[1:3,:]
Out[35]:
A B C D
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
명시적으로 열 분할하기
In [36]: df.iloc[:,1:3]
Out[36]:
B C
2013-01-01 -0.282863 -1.509059
2013-01-02 -0.173215 0.119209
2013-01-03 -2.104569 -0.494929
2013-01-04 -0.706771 -1.039575
2013-01-05 0.567020 0.276232
2013-01-06 0.113648 -1.478427
명시적으로 값 가져오기
In [37]: df.iloc[1,1]
Out[37]: -0.17321464905330858
스칼라에 빠르게 접근하기 (이전 내용과 동일) iat
를 사용
In [38]: df.iat[1,1]
Out[38]: -0.17321464905330858
Boolean 인덱싱
단일 열의 값을 사용하여 데이터를 선택합니다. A
의 값이 0 보다 큰 경우만 선택합니다.
In [39]: df[df.A > 0]
Out[39]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
isin()
함수를 사용하여 필터링 합니다.
In [41]: df2 = df.copy()
In [42]: df2['E'] = ['one', 'one','two','three','four','three']
In [43]: df2
Out[43]:
A B C D E
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 one
2013-01-02 1.212112 -0.173215 0.119209 -1.044236 one
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 two
2013-01-04 0.721555 -0.706771 -1.039575 0.271860 three
2013-01-05 -0.424972 0.567020 0.276232 -1.087401 four
2013-01-06 -0.673690 0.113648 -1.478427 0.524988 three
In [44]: df2[df2['E'].isin(['two','four'])]
Out[44]:
A B C D E
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 two
2013-01-05 -0.424972 0.567020 0.276232 -1.087401 four
설정
새 열을 설정하면 데이터가 인덱스별로 자동으로 정렬됩니다.
In [45]: s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
In [46]: s1
Out[46]:
2013-01-02 1
2013-01-03 2
2013-01-04 3
2013-01-05 4
2013-01-06 5
2013-01-07 6
Freq: D, dtype: int64
In [47]: df['F'] = s1
라벨별로 값 설정하기
In [48]: df.at[dates[0],'A'] = 0
위치 별 값 설정
In [49]: df.iat[0,1] = 0
numpy 배열로 설정하기
In [50]: df.loc[:,'D'] = np.array([5] * len(df))
설정 작업 이전
In [51]: df
Out[51]:
A B C D F
2013-01-01 0.000000 0.000000 -1.509059 5 NaN
2013-01-02 1.212112 -0.173215 0.119209 5 1.0
2013-01-03 -0.861849 -2.104569 -0.494929 5 2.0
2013-01-04 0.721555 -0.706771 -1.039575 5 3.0
2013-01-05 -0.424972 0.567020 0.276232 5 4.0
2013-01-06 -0.673690 0.113648 -1.478427 5 5.0
설정 작업 결과. 0 보다 큰 모든 값들이 -
로 변경됨.
In [52]: df2 = df.copy()
In [53]: df2[df2 > 0] = -df2
In [54]: df2
Out[54]:
A B C D F
2013-01-01 0.000000 0.000000 -1.509059 -5 NaN
2013-01-02 -1.212112 -0.173215 -0.119209 -5 -1.0
2013-01-03 -0.861849 -2.104569 -0.494929 -5 -2.0
2013-01-04 -0.721555 -0.706771 -1.039575 -5 -3.0
2013-01-05 -0.424972 -0.567020 -0.276232 -5 -4.0
2013-01-06 -0.673690 -0.113648 -1.478427 -5 -5.0
출처
'Programming > Python' 카테고리의 다른 글
윈도우에 pyrebase 설치 (0) | 2017.04.19 |
---|---|
Synology 에서 django 실행하기 (0) | 2017.04.05 |
[python] 10 Minutes to pandas - 데이터 확인 (0) | 2017.03.24 |
[python] 10 Minutes to pandas - 오브젝트 생성 (0) | 2017.03.23 |
[python] pyqt5 tableWidget 사용해보기 (0) | 2017.03.21 |
댓글