본문 바로가기
데이터 어쩌구/전처리 및 시각화

[Pandas] DataFrame 고급 사용

by annmunju 2023. 8. 26.

데이터프레임 고급 사용


array가 포함된 데이터 프레임 저장

  • Pickle 이용해 딕셔너리로 저장한 후 다시 불러와서 데이터 프레임으로 변환
import pickle

# write
with open('data_save.pickle','wb') as fw:
    pickle.dump(df.to_dict(), fw)

# read
with open('data_save.pickle', 'rb') as fr:
    data_dict = pickle.load(fr)

df = pd.DataFrame(data_dict)

차집합 구하기 : 테스트 데이터프레임에서 일부 데이터프레임 지우기

# test_df - rm_df

test_df = pd.merge(rm_df, test_df, how='outer', indicator=True).query('_merge == "right_only"').drop(columns=['_merge'])

데이터 프레임 합치기

(참고)

# concat (default outer)
result1 = pd.concat([df1, df2], axis=0) # 행방향 (위아래)

# merge (default inner)
result2 = pd.merge(df1, df2, on='')

# join (default inner)
result3 = df1.join(df2, on='')

리스트 형태인데 문자열로 되어있는 경우 → 리스트로 수정

  • 데이터 프레임에 array(혹은 List) 형식으로 저장해왔다가 다시 꺼내올 때 문자열로 인식되는 경우 발생 (ast.literal_eval()로 해결)
test = pd.read_csv("test.csv", index_col=0)
test['col'] = test_color['col'].apply(ast.literal_eval)

특정 조건을 포함하는 행 추출

  • 특정 문자를 포함하는 행 추출
test_df = test_df[test_df['contents'].str.contains('w')]

# 특정 문자를 포함하지 않는 행 추출
test_df = test_df[~test_df['contents'].str.contains('w')]
  • 특정 리스트를 포함하는 행 추출
test_df = test_df[test_df['column'].isin(list_)]

dataframe 이상치의 값을 변경하기

  • clip(upper=N, lower=N) : 상한선/하한선을 두고 N보다 큰/작은 값이 있으면 그 값을 N으로 변경

수치형 데이터들의 평균을 한번에 구해보기

  • df.groupby('그룹하고자 하는 컬럼').mean(numeric_only = True)

데이터 구간화 하기

  • pd.cut(df['구간화 하고자 하는 컬럼'], bins = 3, labels = ["A", "B", "C"])
    • 일정 간격으로 3등분
  • pd.qcut(df['구간화 하고자 하는 컬럼'], q = 3, labels = ["A", "B", "C"])
    • 개수를 동일하게 하고 3등분

조건에 맞는 데이터 필터링

  • df['필터링 하고자 하는 컬럼'].where(df['필터링 하고자 하는 컬럼'] == 2, "False")
  • df.query(’필터링 하고자 하는 컬럼 < 10’)

 

728x90