Data Handling(pandas)

wandajeong·2021년 12월 26일
0

Data Handling

목록 보기
8/15

열생성

df.info() #결측치가 있으면 무조건 float 

# 데이터프레임 값 넣기 
df.insert(loc=idx, column='평균리뷰수', value=df['num_critic_for_reviews']/df['num_voted_users'])
  • apply function
def my_func(x):
    if x > 180:
        return 1
    else:
        return 0

df['duration'].apply(my_func)
#데이터프레임[칼럼].apply(함수명) 
df['장편영화']=df['duration'].apply(my_func)
  • 특정 index의 값을 덮어쓰기
for i in htt.index.tolist():
    nice_url.at[i,'hompage_url']=htt.at[i,'hompage_url']

열선택

  • data type에 따른 선택
df.select_dtypes('int64')
df.select_dtypes(['int64', 'float64']).info()
df.select_dtypes('number').info()  
  • 열 이름에 따른 선택
df[['duration', 'director_name', '단편영화']]   
#단편영화라는 열이 없어서 키에러 발생
df.filter(items=['duration', 'director_name', '단편영화'])  
#단편영화라는 열이 없어도 에러 없이 있는것만 보여줌(items)
df.filter(like='facebook')

Indexing

#df.iloc, df.loc : 데이터프레임의 행과 열을 동시에 선택 가능 
df[3,4]  #에러 발생 
df.iloc[3,4]    #ok 
df.loc[:'Skyfall']
df.loc[['Avatar', 'Skyfall'], 'duration']
df.loc[['Avatar', 'Skyfall'], ['duration']]

df.columns.get_loc('duration')   #특정 열의 위치값 
df.iloc[:6, 'director_name':'duration']   #에러발생

col_start=df.columns.get_loc('director_name')
col_end=df.columns.get_loc('duration')+1
df.iloc[:6, col_start:col_end]

Filtering

cr1=df['color']=='Black and White'
cr2=df['duration'] <=60
cr=cr1&cr2
df[cr]

df.iloc[cr, :3]  #cr에 인덱스가 포함되어있어서 iloc이 안먹힘
df.iloc[cr.values, :3]

my_lan=['Korean','Dutch']
cr=df['language'].isin(my_lan)
df.loc[cr, 'language':'budget']

cr1=df['language'].isin(my_lan)
cr2=df['duration'].between(60,120)
cr=cr1&cr2
df[cr]
# 쿼리 형식 filtering 
qur="language in @my_lan and 60<=duration<=120"   #@함수
df.query(qur)

#'car'가 포함되어있는 column에 대해서만 
data_imp_ohe.filter(like='car').head()

#특정 조건의 인덱스 날리기 
idx_1 = cardo_v3[cr1].index      
cardo_v4 = cardo_v3.drop(index=idx_1)

# 특정 리스트에 해당하는 값이 dataframe의 특정 열에 존재한다면 해당되는 행만 filtering 하기
filtered_df = df[df['이름'].isin(특정값_리스트)]

기타

  • index 관련
df.last_valid_index()  # 마지막 index 추출 
df.first_valid_index() # 첫번째 index 추출 
df[col].idxmax(axis=1) # max값을 가지고 있는 데이터의 index뽑기 
df[col].idxmax(axis=1) 
  • type 변경
df.astype({'GENDER' : 'objct'}) 
cardo['company_id']=pd.to_numeric(cardo['company_id'])
df.apply(lambda x: pd.to_numeric(x, errors='ignore')) # 일부 때문에 에러나는 경우 
df = df.applymap(lambda x: int(x) if pd.notna(x) else x) # NaN이 아닌 값을 정수형으로 변환
  • 중복 확인
df.duplicated(['key1'])
df.duplicated(['key1'], keep=False) # 중복되는 모든 항목 출력
# 중복 제거(drop.duplicates)
cardo=cardo.drop_duplicates(['company_id'], keep='first')
  • 기타
#범주형, 연속형 칼럼 나누기, 다시 합치기
cat = features.select_dtypes(include=['object','category']).columns.to_list()# 범주형 변수
num = features.select_dtypes(exclude=['object','category']).columns.to_list()# 수치형 변수
data = data[con+cat]

#사용자 지정 순서 지정 
custom_order = [A, B, C]
df['ID'] = pd.Categorical(df['ID'], categorical=custom_order, ordered=True)

# dataframe -> tuple 변환
result_tuples = [tuple(row) for row in df.values]
profile
ML/DL swimmer

0개의 댓글