Data processing에서 join 부분 수정

ewillwin·2023년 1월 25일
0

TSMtech Record

목록 보기
33/39
  • 기존에는 count_gas를 drop하고 전기에너지 기준으로 left join을 했었음
  • 그 이유는 가스에너지소비량의 건물주소가 전기에너지소비량의 부분집합이라고 생각했기 때문
  • 근데 가스에너지소비량의 건물주소가 전기에너지소비량의 건물주소에 포함되지 않는 경우도 존재함을 발견함
  • 따라서 outer join을 한 후, 결측치를 0으로 채우고, count_elcty와 count_gas중 큰 값을 count_elcty에 넣고, count_gas를 drop함
  • 참고사항) itterows()를 통해 for문을 돌 때, 해당 row의 value를 updating하고싶다면, df.loc[idx, 'column명'] = value 이런식으로 idx를 사용하여 기존 DataFrame에 접근한 후 값을 변경해주어야함
  • 참고사항) read_csv()에서 header를 명시적으로 정의했다면 header=None 속성을 추가해줘야함
print("start join")
gas = pd.read_csv("C:/Users/TSM/OneDrive/바탕 화면/energy/gas_groupby.csv",sep =',',encoding='utf-8',names=['date','addr','gas','count_gas'],header=None,low_memory=False)
gas = gas.astype({'date':'str','addr':'str','gas':'int','count_gas':'int'})
gas = gas.sort_values(by=['date','addr'])

electricity = pd.read_csv("C:/Users/TSM/OneDrive/바탕 화면/energy/electricity_groupby.csv",sep =',',encoding='utf-8',names=['date','addr','electricity','count_elcty'],header=None,low_memory=False)
electricity = electricity.astype({'date':'str','addr':'str','electricity':'int','count_elcty':'int'})
electricity = electricity.sort_values(by=['date','addr'])

df = pd.merge(left=electricity, right=gas, how='outer', on=['date','addr'])
df = df.fillna(0)
df = df.sort_values(by=['date','addr'])
df = df[['date','addr','electricity','gas','count_elcty','count_gas']]
df = df.astype({'date':'str','addr':'str','electricity':'int','gas':'int','count_elcty':'int','count_gas':'int'}, errors='ignore')
for idx, row in df.iterrows():
    if row['count_elcty'] < row['count_gas']:
        df.loc[idx, 'count_elcty'] = row['count_gas']
    else:
        continue
df.drop(['count_gas'], axis=1, inplace=True)

df = df[['date','addr','electricity','gas','count_elcty']]
df = df.astype({'date':'str','addr':'str','electricity':'int','gas':'int','count_elcty':'int'}, errors='ignore')
print(df)
df.to_csv("C:/Users/TSM/OneDrive/바탕 화면/energy/buildingenergy.csv", mode='w', index=False, header=None)
print("complete join")
profile
Software Engineer @ LG Electronics

0개의 댓글