Pandas 데이터 프레임의 범주 형 데이터 변환
이 유형의 데이터 (너무 많은 열)가있는 데이터 프레임이 있습니다.
col1 int64
col2 int64
col3 category
col4 category
col5 category
열은 다음과 같이 보입니다.
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
다음과 같이 열의 모든 값을 정수로 변환하고 싶습니다.
[1, 2, 3, 4, 5, 6, 7, 8]
나는 이것을 하나의 열에 대해 해결했습니다.
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
이제 데이터 프레임에 이전 'col3'과 새 'c'라는 두 개의 열이 있으며 이전 열을 삭제해야합니다.
그것은 나쁜 습관입니다. 작동하지만 내 데이터 프레임에는 많은 열이 있으며 수동으로 수행하고 싶지 않습니다.
이 비단뱀적이고 영리한 방법은 무엇입니까?
첫째, 범주 형 열을 숫자 코드로 변환하려면 다음을 사용하여 더 쉽게 수행 할 수 있습니다 dataframe['c'].cat.codes
.
또한를 사용하여 데이터 프레임에서 특정 dtype을 가진 모든 열을 자동으로 선택할 수 있습니다 select_dtypes
. 이렇게하면 자동으로 선택된 여러 열에 위의 작업을 적용 할 수 있습니다.
먼저 예제 데이터 프레임 만들기 :
In [75]: df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'), 'col3':list('ababb')})
In [76]: df['col2'] = df['col2'].astype('category')
In [77]: df['col3'] = df['col3'].astype('category')
In [78]: df.dtypes
Out[78]:
col1 int64
col2 category
col3 category
dtype: object
그런 다음를 사용 select_dtypes
하여 열을 선택한 다음 .cat.codes
이러한 각 열에 적용 하면 다음 결과를 얻을 수 있습니다.
In [80]: cat_columns = df.select_dtypes(['category']).columns
In [81]: cat_columns
Out[81]: Index([u'col2', u'col3'], dtype='object')
In [83]: df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)
In [84]: df
Out[84]:
col1 col2 col3
0 1 0 0
1 2 1 1
2 3 2 0
3 4 0 1
4 5 1 1
이것은 나를 위해 작동합니다.
pandas.factorize( ['B', 'C', 'D', 'B'] )[0]
산출:
[0, 1, 2, 0]
추가 열을 만들고 나중에 삭제하는 것뿐이라면 처음부터 새 열을 사용하십시오.
dataframe = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'), 'col3':list('ababb')})
dataframe.col3 = pd.Categorical.from_array(dataframe.col3).codes
완료되었습니다. 이제 Categorical.from_array
더 이상 사용되지 않으므로 Categorical
직접 사용하십시오.
dataframe.col3 = pd.Categorical(dataframe.col3).codes
인덱스에서 레이블로 다시 매핑해야하는 경우에도 더 나은 방법이 있습니다.
dataframe.col3, mapping_index = pd.Series(dataframe.col3).factorize()
아래 확인
print(dataframe)
print(mapping_index.get_loc("c"))
여기에서 여러 열을 변환해야합니다. 그래서 제가 사용한 방법 중 하나는 ..
for col_name in df.columns:
if(df[col_name].dtype == 'object'):
df[col_name]= df[col_name].astype('category')
df[col_name] = df[col_name].cat.codes
이것은 모든 문자열 / 객체 유형 열을 범주 형으로 변환합니다. 그런 다음 각 범주 유형에 코드를 적용합니다.
@ Quickbeam2k1, 아래 참조-
dataset=pd.read_csv('Data2.csv')
np.set_printoptions(threshold=np.nan)
X = dataset.iloc[:,:].values
sklearn 사용
from sklearn.preprocessing import LabelEncoder
labelencoder_X=LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])
참고 URL : https://stackoverflow.com/questions/32011359/convert-categorical-data-in-pandas-dataframe
'Development Tip' 카테고리의 다른 글
prop`history`는`Router`에서 필수로 표시되지만 그 값은`undefined`입니다. (0) | 2020.10.11 |
---|---|
정적 메서드와 인스턴스 메서드의 차이점 (0) | 2020.10.11 |
아무것도 선택하지 않으시겠습니까? (0) | 2020.10.11 |
Vim에서 명령과 삽입 모드를 어떻게 전환합니까? (0) | 2020.10.11 |
코드 우선 마이그레이션을 비활성화하려면 어떻게해야합니까? (0) | 2020.10.11 |