map 함수 이용하여 DataFrame 특정 컬럼 값 변환하는 방법.
from pandas import DataFrame
data = {
'maker': ['apple.com', 'google.com', 'apple.com', 'oralce.com', 'ibm.com'],
't_val': [200, 150, 130, 300, 230]
}
df = DataFrame(data)
df['t_val2'] = df['t_val'].map(lambda x: x * 2)
print(df)
특정 컬럼의 값을 조건에 의해 변환하는 몇 가지 방법.
1. numpy 의 select 함수를 이용.
import numpy as np
from pandas import DataFrame
data = {
'maker': ['apple.com', 'google.com', 'apple.com', 'oralce.com', 'ibm.com']
}
conditions = [df.maker == "apple.com", df.maker == "google.com", df.maker != '']
choices = [1, 2, 3]
df['maker_cd'] = np.select(conditions, choices)
print(df)
2. 비슷하지만 안되는 경우.
data = {
'maker': ['apple.com', 'google.com', 'apple.com', 'oralce.com', 'ibm.com']
}
conditions = [df.maker.startswith("apple"), df.maker.startswith("google"), df.maker != '']
choices = [1, 2, 3]
df['maker_cd'] = np.select(conditions, choices)
print(df)
1번은 잘 동작하지만 2번은 다음과 같은 에러가 난다.
AttributeError: 'Series' object has no attribute 'startswith'
2번 해결하기 위해 이것저것 해보다 역시나 구글링 이용해서 찾은 방식.
3. numpy 의 vectorize 이용한 방법
import numpy as np
from pandas import DataFrame
def maker_conditions(x):
if x.startswith("apple"):
return 10
elif x.startswith("google"):
return 20
elif x.startswith("ibm"):
return 30
else:
return 0
data = {
'maker': ['apple.com', 'google.com', 'apple.com', 'oralce.com', 'ibm.com']
}
df = DataFrame(data)
func = np.vectorize(maker_conditions)
df['maker_cd'] = func(df.maker)
print(df)
뭔가 더 쌈박한 방법이 있을 듯 한데 ...
'Lang' 카테고리의 다른 글
[Python]Hydra 의 로그 파일을 일별로 변경하는 방법 (0) | 2020.10.15 |
---|---|
[Python] jsonbender를 이용한 json 포맷 변환 (0) | 2020.10.15 |
APScheduler 스케쥴링을 동적으로 제어하는 방법 (0) | 2020.09.21 |
MS Azure Blob Storage 에 json 데이터 업로드 (0) | 2020.09.11 |
[python]pandas, mongoDB, odo 간단한 테스트 (2) | 2020.08.21 |