판다의 데이터 프레임 컬럼 슬라이스를 가져오는 방법
CSV 파일에서 기계학습 데이터를 로드합니다.처음 두 열은 관측치이고 나머지 열은 피쳐입니다.
현재 다음과 같은 작업을 하고 있습니다.
data = pandas.read_csv('mydata.csv')
그 결과 다음과 같은 결과가 나타납니다.
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
이 데이터 프레임을 두 개의 데이터 프레임으로 슬라이스하고 싶습니다. 하나는 열을 포함합니다.a
그리고.b
그리고 하나는 기둥을 포함하고 있다.c
,d
그리고.e
.
다음과 같은 것은 쓸 수 없다.
observations = data[:'c']
features = data['c':]
어떤 방법이 최선인지 잘 모르겠어요.필요합니까?pd.Panel
?
그런데 데이터 프레임 인덱스가 상당히 일관성이 없는 것 같습니다.data['a']
허용됩니다만,data[0]
그렇지 않습니다.반면.data['a':]
허가되지 않지만data[0:]
실제적인 이유라도 있나요?열이 Int에 의해 색인화되면 이는 매우 혼란스러운 것입니다.data[0] != data[0:1]
2017년 답변 - 판다 0.20: .ix는 권장되지 않습니다..loc 사용
문서의 권장 사항을 참조하십시오.
.loc
는 라벨 기반 인덱싱을 사용하여 행과 열을 모두 선택합니다.인덱스 또는 열의 값인 레이블입니다.로 슬라이스.loc
에는 마지막 요소가 포함됩니다.
다음과 같은 열이 있는 DataFrame이 있다고 가정합니다.
foo
,bar
,quz
,ant
,cat
,sat
,dat
.
# selects all rows and all columns beginning at 'foo' up to and including 'sat'
df.loc[:, 'foo':'sat']
# foo bar quz ant cat sat
.loc
는 Python 목록이 행과 열 모두에 대해 사용하는 것과 동일한 슬라이스 표기법을 사용할 수 있습니다.슬라이스 표기법start:stop:step
# slice from 'foo' to 'cat' by every 2nd column
df.loc[:, 'foo':'cat':2]
# foo quz cat
# slice from the beginning to 'bar'
df.loc[:, :'bar']
# foo bar
# slice from 'quz' to the end by 3
df.loc[:, 'quz'::3]
# quz sat
# attempt from 'sat' to 'bar'
df.loc[:, 'sat':'bar']
# no columns returned
# slice from 'sat' to 'bar'
df.loc[:, 'sat':'bar':-1]
sat cat ant quz bar
# slice notation is syntatic sugar for the slice function
# slice from 'quz' to the end by 2 with slice function
df.loc[:, slice('quz',None, 2)]
# quz cat dat
# select specific columns with a list
# select columns foo, bar and dat
df.loc[:, ['foo','bar','dat']]
# foo bar dat
행 및 열별로 슬라이스할 수 있습니다.예를 들어 레이블이 있는 5개의 행이 있는 경우v
,w
,x
,y
,z
# slice from 'w' to 'y' and 'foo' to 'ant' by 3
df.loc['w':'y', 'foo':'ant':3]
# foo ant
# w
# x
# y
주의: .ix
팬더 v0.20 이후 폐지되었습니다.대신,.loc
또는.iloc
(필요에 따라).
데이터 프레임ix 인덱스는 액세스하려는 대상입니다.조금 혼란스럽긴 하지만(판다 인덱싱이 때때로 혼란스럽다는 것에 동의합니다!) 다음은 당신이 원하는 대로 할 수 있는 것 같습니다.
>>> df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
>>> df.ix[:,'b':]
b c d e
0 0.418762 0.042369 0.869203 0.972314
1 0.991058 0.510228 0.594784 0.534366
2 0.407472 0.259811 0.396664 0.894202
3 0.726168 0.139531 0.324932 0.906575
여기서 .ix[row slice, column slice]는 해석되는 것입니다.팬더 인덱스에 대한 자세한 내용은 http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced를 참조하십시오.
Seaborn 패키지의 타이타닉 데이터 세트를 예로 들어 보겠습니다.
# Load dataset (pip install seaborn)
>> import seaborn.apionly as sns
>> titanic = sns.load_dataset('titanic')
열 이름 사용
>> titanic.loc[:,['sex','age','fare']]
열 색인 사용
>> titanic.iloc[:,[2,3,6]]
using ix (팬더보다 오래된 버전) <.20 버전)
>> titanic.ix[:,[‘sex’,’age’,’fare’]]
또는
>> titanic.ix[:,[2,3,6]]
reindex 메서드 사용
>> titanic.reindex(columns=['sex','age','fare'])
또, 데이터 프레임의 경우
데이터.
예시와 같이 열 a와 d만 추출하려면(예: 첫 번째와 네 번째 열), 팬더 데이터 프레임에서 iloc matawod가 필요하며 매우 효과적으로 사용할 수 있습니다.추출할 열의 색인만 알면 됩니다.예를 들어 다음과 같습니다.
>>> data.iloc[:,[0,3]]
너에게 줄 것이다
a d
0 0.883283 0.100975
1 0.614313 0.221731
2 0.438963 0.224361
3 0.466078 0.703347
4 0.955285 0.114033
5 0.268443 0.416996
6 0.613241 0.327548
7 0.370784 0.359159
8 0.692708 0.659410
9 0.806624 0.875476
의 .DataFrame
다음과 같이 목록의 각 열 이름을 참조합니다.
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
data_ab = data[list('ab')]
data_cde = data[list('cde')]
두 개의 기둥 범위를 잘라내서 (나처럼) 함께 결합하려고 여기에 온 경우 다음과 같은 작업을 수행할 수 있습니다.
op = df[list(df.columns[0:899]) + list(df.columns[3593:])]
print op
이렇게 하면 처음 900개의 컬럼과 3593개의 (모든) 컬럼을 가진 새로운 데이터 프레임이 생성됩니다(데이터 세트에 약 4000개의 컬럼이 있다고 가정).
다음은 선택적 레이블 기반, 인덱스 기반 및 선택적 범위 기반 열 슬라이싱을 포함하여 다양한 방법을 사용하여 선택적 열 슬라이싱을 수행할 수 있는 방법입니다.
In [37]: import pandas as pd
In [38]: import numpy as np
In [43]: df = pd.DataFrame(np.random.rand(4,7), columns = list('abcdefg'))
In [44]: df
Out[44]:
a b c d e f g
0 0.409038 0.745497 0.890767 0.945890 0.014655 0.458070 0.786633
1 0.570642 0.181552 0.794599 0.036340 0.907011 0.655237 0.735268
2 0.568440 0.501638 0.186635 0.441445 0.703312 0.187447 0.604305
3 0.679125 0.642817 0.697628 0.391686 0.698381 0.936899 0.101806
In [45]: df.loc[:, ["a", "b", "c"]] ## label based selective column slicing
Out[45]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
In [46]: df.loc[:, "a":"c"] ## label based column ranges slicing
Out[46]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
In [47]: df.iloc[:, 0:3] ## index based column ranges slicing
Out[47]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
### with 2 different column ranges, index based slicing:
In [49]: df[df.columns[0:1].tolist() + df.columns[1:3].tolist()]
Out[49]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
모든 행을 원하는 경우 DataFrame에서 열의 하위 집합을 가져오는 또 다른 방법은 다음과 같습니다.
data[['a','b']]
★★★★★★★★★★★★★★★★★」data[['c','d','e']]
숫자 열 인덱스를 사용하려면 다음을 수행할 수 있습니다.
data[data.columns[:2]]
★★★★★★★★★★★★★★★★★」data[data.columns[2:]]
등가
>>> print(df2.loc[140:160,['Relevance','Title']])
>>> print(df2.ix[140:160,[3,7]])
데이터 프레임이 다음과 같은 경우:
group name count
fruit apple 90
fruit banana 150
fruit orange 130
vegetable broccoli 80
vegetable kale 70
vegetable lettuce 125
OUTPUT은 다음과 같습니다.
group name count
0 fruit apple 90
1 fruit banana 150
2 fruit orange 130
논리 연산자 np.logical_not을 사용하는 경우
df[np.logical_not(df['group'] == 'vegetable')]
에 대해 더 자세히
https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.logic.html
다른 논리 연산자
logical_and(x1, x2, /[, out, where, ...]) x1 AND x2 요소의 참값을 계산합니다.
logical_or(x1, x2, /[, out, where, casting, ...]) x1 또는 x2 요소의 실제 값을 계산합니다.
- logical_not(x, /[, out, where, casting, ...]) NOT x 요소의 참값을 계산합니다.
- logical_xor(x1, x2, /[, out, where, ..]) x1 XOR x2의 참값을 요소별로 계산합니다.
다음 방법을 사용할 수 있습니다.
df = pd.DataFrame(np.random.rand(10, 5), columns = list('abcde'))
df_ab = df.truncate(before='a', after='b', axis=1)
df_cde = df.truncate(before='c', axis=1)
언급URL : https://stackoverflow.com/questions/10665889/how-to-take-column-slices-of-dataframe-in-pandas
'programing' 카테고리의 다른 글
다운로드 할 phpexcel (0) | 2022.09.22 |
---|---|
Java Eclipse:JAR로 내보내는 것과 실행 가능한 JAR로 내보내는 것의 차이 (0) | 2022.09.22 |
mysql/퍼지 검색을 위한 Levenshtein 거리 구현? (0) | 2022.09.22 |
Vue.js 서드파티 스크립트에서 사용할 컴포넌트 데이터 속성을 표시하는 방법 (0) | 2022.09.22 |
배열/문자열 목록을 배열/정수 목록으로 변환하는 람다 식 (0) | 2022.09.18 |