Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Unity
- MS-SQL
- 다이어트
- PyQt5
- flutter
- pandas
- mssql
- 날짜
- 맛집
- 라즈베리파이
- Excel
- 함수
- javascript
- IOS
- PER
- MySQL
- ASP
- GIT
- tensorflow
- 유니티
- 리눅스
- Linux
- swift
- urllib
- sqlite
- node.js
- PyQt
- port
- ubuntu
- python
Archives
아미(아름다운미소)
pandas의 str.split(expand=True)를 사용한 방법 본문
import pandas as pd
import numpy as np
import time
# 테스트 데이터 생성 (400만 건)
n_rows = 4_000_000
df = pd.DataFrame({
'y_col': [f'text_{i}' for i in range(n_rows - 2)] + ['no_underscore', None]
})
# 결과를 저장할 DataFrame 생성
result_df = df.copy()
# 방법 1: str.split + 열 할당
start_time = time.time()
debris = result_df['y_col'].str.split('_', expand=True)
result_df['a_split'] = debris[0]
result_df['b_split'] = debris[1]
end_time = time.time()
print(f"방법 1 (str.split + 열 할당): {end_time - start_time:.4f} 초")
# 방법 2: str.split + 한 번에 열 할당
start_time = time.time()
result_df[['a_split_once', 'b_split_once']] = result_df['y_col'].str.split('_', expand=True)
end_time = time.time()
print(f"방법 2 (str.split + 한 번에 열 할당): {end_time - start_time:.4f} 초")
# 방법 3: str.extract + 정규 표현식
start_time = time.time()
result_df[['a_extract', 'b_extract']] = result_df['y_col'].str.extract(r'(\w+)_(\w+)')
end_time = time.time()
print(f"방법 3 (str.extract): {end_time - start_time:.4f} 초")
# 방법 4: str.partition
start_time = time.time()
partition_result = result_df['y_col'].str.partition('_')
result_df['a_partition'] = partition_result[0]
result_df['b_partition'] = partition_result[2]
end_time = time.time()
print(f"방법 4 (str.partition): {end_time - start_time:.4f} 초")
# 결과 확인
print("\n결과 샘플 (처음 5행 및 마지막 2행):")
print(result_df.head())
print(result_df.tail())
import pandas as pd
import numpy as np
import time
# 400만 건의 테스트 데이터 생성
n_rows = 4_000_000
df = pd.DataFrame({
'y_col': [f'text_{i}' for i in range(n_rows)]
})
# 방법 1: str.split + 열 할당
start_time = time.time()
debris = df['y_col'].str.split('_', expand=True)
df['a'] = debris[0]
df['b'] = debris[1]
end_time = time.time()
print(f"방법 1 (str.split + 열 할당): {end_time - start_time:.4f} 초")
# 데이터 초기화
df.drop(columns=['a', 'b'], inplace=True)
# 방법 2: str.split + 한 번에 열 할당
start_time = time.time()
df[['a', 'b']] = df['y_col'].str.split('_', expand=True)
end_time = time.time()
print(f"방법 2 (str.split + 한 번에 열 할당): {end_time - start_time:.4f} 초")
# 데이터 초기화
df.drop(columns=['a', 'b'], inplace=True)
# 방법 3: str.extract + 정규 표현식
start_time = time.time()
df[['a', 'b']] = df['y_col'].str.extract(r'(\w+)_(\w+)')
end_time = time.time()
print(f"방법 3 (str.extract): {end_time - start_time:.4f} 초")
start_time = time.time()
df[['a', 'b']] = df['y_col'].str.partition('_')[[0, 2]]
end_time = time.time()
print(f"방법 4 (str.partition 한 번에 할당): {end_time - start_time:.4f} 초")
df[['a', 'b']] = df['y_col'].str.split('_', expand=True)
import pandas as pd
import numpy as np
# 예제 데이터 (널 값 포함)
df = pd.DataFrame({'y_col': ['apple_red', 'banana_yellow', 'grape_purple', None, 'orange']})
# NaN을 빈 문자열로 변환한 후 NumPy로 처리
debris = df['y_col'].fillna('_').str.split('_', n=1, expand=True).to_numpy()
df['a'], df['b'] = debris[:, 0], debris[:, 1]
# b 컬럼이 NaN이면 빈 문자열 처리
df['b'] = df['b'].fillna('')
print(df)
import pandas as pd
import numpy as np
# 예시 데이터
data = {'y_col': ['apple_red', 'banana', 'grape_purple']}
df = pd.DataFrame(data)
# 두 번째 코드 (수정 후)
df['a'] = [x.split('_')[0] for x in df['y_col']]
df['b'] = [x.split('_')[1] if '_' in x else np.nan for x in df['y_col']]
print(df)
df[y_col] = df[y_col].astype(str)
df['a'] = [x.split('_')[0] if '_' in x else None for x in df[y_col]]
df['b'] = [x.split('_')[1] if '_' in x else None for x in df[y_col]]
'랭귀지 > pandas' 카테고리의 다른 글
-숫자 형태의 부분을 찾아 그 숫자를 추출 (0) | 2025.03.19 |
---|---|
두 csv 비교 (0) | 2025.03.14 |
ES문자열 제거 (0) | 2025.03.13 |
splite (0) | 2025.03.13 |
날짜 형식 변환 (YYYY-MM-DD 형식으로) (0) | 2025.03.12 |
Comments