아미(아름다운미소)

pandas의 str.split(expand=True)를 사용한 방법 본문

랭귀지/pandas

pandas의 str.split(expand=True)를 사용한 방법

유키공 2025. 3. 17. 18:18
import pandas as pd
import numpy as np
import time

# 1. 예제 데이터 생성 (400만 건, '_' 없는 값 포함)
data = {'a': ['foo_bar'] * 2_000_000 + ['hello_world'] * 1_500_000 + ['example'] * 500_000 + ['justtext'] * 500_000}
df1 = pd.DataFrame(data)  # Pandas용
df2 = df1.copy()  # NumPy용

### 2. Pandas str.split(expand=True) 방식 ###
start_time = time.time()
debris = df1['a'].str.split('_', expand=True)
df1['aaa'] = debris[0]
df1['bbb'] = debris[1]  # NaN이 자동 할당됨
pandas_time = time.time() - start_time

### 3. NumPy 벡터화 방식 ###
start_time = time.time()
split_values = np.array([x.split('_') if '_' in x else (x, np.nan) for x in df2['a']], dtype=object)
df2['aaa'] = split_values[:, 0]
df2['bbb'] = split_values[:, 1]  # np.nan을 사용하여 Pandas와 동일하게 처리
numpy_time = time.time() - start_time

### ✅ 결과 비교 ###
is_equal = df1.equals(df2)

# 결과 출력
print(f"Pandas str.split(expand=True) 실행 시간: {pandas_time:.4f} 초")
print(f"NumPy 벡터화 실행 시간: {numpy_time:.4f} 초")
print(f"결과가 일치하는가? {'✅ 동일' if is_equal else '❌ 다름'}")

# 샘플 결과 출력 (상위 5개 데이터)
print("\n📌 Pandas 방식 결과 샘플")
print(df1.head())

print("\n📌 NumPy 방식 결과 샘플")
print(df2.head())

'랭귀지 > pandas' 카테고리의 다른 글

두 csv 비교  (0) 2025.03.14
ES문자열 제거  (0) 2025.03.13
splite  (0) 2025.03.13
날짜 형식 변환 (YYYY-MM-DD 형식으로)  (0) 2025.03.12
백터화  (0) 2025.03.11
Comments