판다: 범주를 숫자로 변환합니다.
다음과 같은 국가의 데이터 프레임이 있다고 가정합니다.
cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
국가를 '원핫 인코딩'으로 변환하는 pd.get_dummies 함수가 있다는 것을 알고 있습니다.하지만, 나는 그것들을 인덱스로 변환하여 내가 얻을 수 있도록 하고 싶습니다.cc_index = [1,2,1,3]
대신.
아래와 같이 numpywhere 절과 함께 get_dummies를 사용하는 것보다 더 빠른 방법이 있다고 생각합니다.
[np.where(x) for x in df.cc.get_dummies().values]
이것은 R에서 '인자'를 사용하는 것이 다소 더 쉬우므로 판다도 비슷한 것을 가지고 있기를 바랍니다.
먼저 열의 유형을 변경합니다.
df.cc = pd.Categorical(df.cc)
이제 데이터는 비슷해 보이지만 범주형으로 저장됩니다.범주 코드를 캡처하려면 다음을 수행합니다.
df['code'] = df.cc.cat.codes
이제 다음이 있습니다.
cc temp code
0 US 37.0 2
1 CA 12.0 1
2 US 35.0 2
3 AU 20.0 0
데이터 프레임을 수정하지 않고 코드만 가져오는 경우:
df.cc.astype('category').cat.codes
또는 범주형 열을 인덱스로 사용합니다.
df2 = pd.DataFrame(df.temp)
df2.index = pd.CategoricalIndex(df.cc)
영상 시리즈를 정수 식별자로만 변환하려는 경우 를 사용할 수 있습니다.
이 솔루션을 메모합니다.pd.Categorical
가 알파벳 순으로 정렬되지 않습니다.그래서 첫 번째 국가가 배정될 것입니다.0
시작하려는 경우1
상수를 추가할 수 있습니다.
df['code'] = pd.factorize(df['cc'])[0] + 1
print(df)
cc temp code
0 US 37.0 1
1 CA 12.0 2
2 US 35.0 1
3 AU 20.0 3
알파벳 순으로 정렬하려면 다음을 지정합니다.sort=True
:
df['code'] = pd.factorize(df['cc'], sort=True)[0] + 1
만약 당신이 도서관을 사용하고 있다면, 당신은 사용할 수 있습니다.pd.Categorical
입력 문자열은 인코딩 전에 알파벳 순으로 정렬됩니다.
from sklearn.preprocessing import LabelEncoder
LE = LabelEncoder()
df['code'] = LE.fit_transform(df['cc'])
print(df)
cc temp code
0 US 37.0 2
1 CA 12.0 1
2 US 35.0 2
3 AU 20.0 0
한 줄 코드:
df[['cc']] = df[['cc']].apply(lambda col:pd.Categorical(col).codes)
이것은 또한 당신이 가지고 있는 경우에도 작동합니다.list_of_columns
:
df[list_of_columns] = df[list_of_columns].apply(lambda col:pd.Categorical(col).codes)
게다가, 만약 당신이 계속하고 싶다면.NaN
대체를 적용할 수 있는 값:
df[['cc']] = df[['cc']].apply(lambda col:pd.Categorical(col).codes).replace(-1,np.nan)
주파수(고주파-고주파)를 기준으로 숫자로 변환해 보십시오.
labels = df[col].value_counts(ascending=True).index.tolist()
codes = range(1,len(labels)+1)
df[col].replace(labels,codes,inplace=True)
열을 숫자로 변경합니다.새 열은 생성되지 않고 값만 숫자 데이터로 바꿉니다.
def characters_to_numb(*args):
for arg in args:
df[arg] = pd.Categorical(df[arg])
df[arg] = df[arg].cat.codes
return df
언급URL : https://stackoverflow.com/questions/38088652/pandas-convert-categories-to-numbers
'programing' 카테고리의 다른 글
PowerShell에서 Copy-Item으로 파일을 덮어쓰는 방법 (0) | 2023.08.15 |
---|---|
고유 키와 IsUnique=Yes인 색인의 차이점은 무엇입니까? (0) | 2023.08.15 |
왜 우리는 개인 건설업자가 필요합니까? (0) | 2023.08.15 |
Javascript|jQuery를 사용하여 특정 인라인 스타일 제거 (0) | 2023.08.15 |
개체에 추가 (0) | 2023.08.10 |