랭귀지/pandas
데이터프레임의 컬럼명과 타입이 일치하는지 체크하고, 불일치할 경우 틀린 컬럼명과 타입을 출력
유키공
2024. 8. 29. 20:11
import pandas as pd
# 예시 데이터프레임 생성
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df3 = pd.DataFrame({'A': [9, 10], 'C': [11, 12]}) # 컬럼명이 다름
df4 = pd.DataFrame({'A': [13, 14], 'B': [15, 16]})
df5 = pd.DataFrame({'A': [17, 18], 'B': [19, 20]})
df6 = pd.DataFrame({'A': [21, 22], 'B': [23.0, 24.0]}) # 타입이 다름
df7 = pd.DataFrame({'A': [25, 26], 'B': [27, 28]})
# 데이터프레임 리스트
dataframes = [df1, df2, df3, df4, df5, df6, df7]
# 기준 데이터프레임의 컬럼명과 타입
base_columns = {col: df1[col].dtype for col in df1.columns}
# 불일치 체크
any_unmatched = False
for i, df in enumerate(dataframes):
for col in base_columns.keys():
if col not in df.columns:
print(f"DataFrame {i+1}: '{col}' 컬럼이 없습니다.")
any_unmatched = True
elif df[col].dtype != base_columns[col]:
print(f"DataFrame {i+1}: '{col}'의 타입이 {df[col].dtype}로 불일치합니다. (기준: {base_columns[col]})")
print(f"틀린 데이터: {df[col].tolist()}")
any_unmatched = True
# 불일치가 없을 때 concat
if not any_unmatched:
combined_df = pd.concat(dataframes, axis=0, ignore_index=True)
print("모든 데이터프레임이 일치합니다. 결합 완료:")
print(combined_df)
else:
print("불일치가 발견되어 결합할 수 없습니다.")
import pandas as pd
# 예시 데이터프레임 생성
df1 = pd.DataFrame({'A': range(1000), 'B': range(1000)})
df2 = pd.DataFrame({'A': range(1000, 2000), 'B': range(1000, 2000)})
df3 = pd.DataFrame({'A': range(2000, 3000), 'C': range(1000)}) # 컬럼명이 다름
df4 = pd.DataFrame({'A': range(3000, 4000), 'B': range(3000, 4000)})
df5 = pd.DataFrame({'A': range(4000, 5000), 'B': [x + 0.5 for x in range(1000)]}) # 길이를 맞춤
# 리스트에 데이터프레임 추가
dataframes = [df1, df2, df3, df4, df5]
# 기준 데이터프레임의 컬럼명과 타입
base_columns = {col: df1[col].dtype for col in df1.columns}
# 불일치 체크
any_unmatched = False
for i, df in enumerate(dataframes):
for col in base_columns.keys():
if col not in df.columns:
print(f"DataFrame {i+1}: '{col}' 컬럼이 없습니다.")
any_unmatched = True
elif df[col].dtype != base_columns[col]:
print(f"DataFrame {i+1}: '{col}'의 타입이 {df[col].dtype}로 불일치합니다. (기준: {base_columns[col]})")
print(f"틀린 데이터 샘플: {df[col].sample(5).tolist()}") # 샘플 데이터 출력
any_unmatched = True
# 불일치가 없을 때 concat
if not any_unmatched:
combined_df = pd.concat(dataframes, axis=0, ignore_index=True)
print("모든 데이터프레임이 일치합니다. 결합 완료:")
print(combined_df)
else:
print("불일치가 발견되어 결합할 수 없습니다.")