temp/실습

데이터 분석 실전 연습: Dataframe 활용(달탐사)

시송 2024. 12. 30. 20:51

컬럼명 변경

컬럼 리스트를 '모두 순서대로' 입력(길이가 동일해야 함)

  • df.columns = ['a', 'b', 'c']

특정 위치 컬럼의 이름 변경

  • df.columns.values[n] = 'a'
needed_samples_overview.rename(columns={'ID' : 'Number of samples'}, inplace=True)
  • df.rename(columns={변경 전 컬럼명:변경 후 컬럼명 }, inplace = True)
  • df.rename({변경 전 컬럼명:변경 후 컬럼명 }, axis ='columns')
  • df.rename({변경 전 컬럼명:변경 후 컬럼명 }, axis = 1)
    • 함수를 이용해, dict 타입으로 지정하여 변경(기존이름key를 새로운이름 value로 변경)
      ex) df = df.rename(columns = lambda x: '[' + x +']')

 

데이터 탐색

  • .value_counts(): NaN값은 무시된 모든 데이터 수 카운팅
  • isnull().sum(): isnull()로 컬럼별 TF DF 생성 후, 컬럼별 T 갯수 sum()

sample_total_weight = df.groupby('Mission')['Weight (kg)'].sum()
  • 'Mission'.unique()로 group
  • 'Mission'.unique() 별 'Weight (kg)'으로 sum()
# rock_samples 데이터프레임에서 암석유형별('Type') 개수를 구해서 total_rock_count 라는 데이터프레임을 만든다.
total_rock_count = rock_samples.groupby('Type')['ID'].count().reset_index()

 

팬시인덱싱 응용

#1
(df['Weight (kg)'] >= 0.16) & (df['Pristine (%)'] <= 50)

#2
low_samples = df[(df['Weight (kg)'] >= 0.16) & (df['Pristine (%)'] <= 50)]
low_samples = df.loc[(df['Weight (kg)'] >= 0.16) & (df['Pristine (%)'] <=  50)]

low_samples[low_samples['Type'].isin(['Basalt', 'Breccia'])]

df[df['Type'] == 'Crustal'].head(5)

#1 TF series

#2 팬시 인덱싱 in DF

  • 논리 연산자 이용
  • .isin() 이용
  • Type이 Crustal인 data만 추출

 

데이터 간 연산/데이터 간 조정

  • df[컬럼명].diff(): 현 행과 앞 행간의 차를 표시한다
  • df[컬럼명]-df[컬럼명].shift()
  • df.shift(n)을 사용했을 때, n의 수만큼 행이 아래로 내려간다.
    • 음수 넣으면 , 반대로 행이 위로 올라가게 된다.
    • fill_value 파라미터를 설정해주거나 fillna()함수를 함께 사용하면 결측값 변환이 가능하다 
missions['Command Module (CM)'], missions['CM Mass (kg)'] = 명령모듈이름, 명령모듈중량

missions['CM mass diff'] = missions['CM Mass (kg)'].diff().fillna(0)

 

 

df.apply(함수)

# 1단계 -> 컬럼값변환 : rock_samples['Weight (g)'] -> rock_samples['Weight (kg)]
rock_samples['Weight (g)'] = rock_samples['Weight (g)'].apply(lambda x: x * 0.001)

#2단계 -> 컬럼명 변환 : 'Weight(g)' -> 'Weight(kg)
rock_samples.rename(columns={'Weight (g)':'Weight (kg)'}, inplace=True)

 

  • 컬럼, 데이터 프레임 전체에 적용 가능한 함수
  • 함수 부분에 컬럼이나 데이터 프레임에 적용할 함수 입력(lambda 가능)

 

테이블 병합

# concat은 row 기준 용이(병합 기준 컬럼 불필요. 기본이 열로 추가)
needed_samples = pd.concat([needed_samples, Crustal])

# merge는 컬럼기준 용이(병합 기준 컬럼 필요)
missions = pd.merge(missions, sample_total_weight, on='Mission')
  • pd.merge(기존df, 새로운 프레임이나 시리즈, on = 인덱스로 사용할 컬럼명)

 

기타 함수

  • df.drop([컬럼s], axis=1, inplace=True)
  • .tolist(): zip과 비슷하게 같은 위치의 데이터끼리 묶어준다. 차이는 list로 묶인다는 점

 

 

 

참고문헌

Pandas - DataFrame 컬럼명, 인덱스명 변경 : 네이버 블로그

https://uni2237.tistory.com/154