랭귀지/pandas
splite
유키공
2025. 3. 13. 09:15
import pandas as pd
import numpy as np
# 예시 데이터프레임 생성
data = {'a': ['foo_bar', 'hello_world', 'example']} # 'example'에는 _가 없음
df = pd.DataFrame(data)
# numpy 배열로 변환
arr = df['a'].to_numpy()
# 분할 결과의 길이를 동일하게 맞추기
split_list = [x.split('_') if '_' in x else [x, np.nan] for x in arr] # _가 없으면 [원본, NaN]
split_arr = np.array(split_list, dtype=object) # 2차원 배열로 변환 (dtype=object로 설정)
# 분할된 결과를 새로운 열로 추가
df['aaa'] = split_arr[:, 0] # 첫 번째 부분 (원본 또는 분할된 첫 번째 부분)
df['bbb'] = split_arr[:, 1] # 두 번째 부분 (분할된 두 번째 부분 또는 NaN)
print(df)
import numpy as np
import pandas as pd
# 예제 데이터프레임 생성
df = pd.DataFrame({'a': ['A_001', 'B_002', 'C_003', 'D004']}) # 'D004'은 '_'가 없음
# NumPy 배열로 변환
np_array = df['a'].to_numpy()
# '_' 기준으로 문자열 분리, 없는 경우 NaN 처리
split_result = np.array([item.split('_') if '_' in item else [item, np.nan] for item in np_array], dtype=object)
# 첫 번째와 두 번째 요소를 추출
aaa = split_result[:, 0]
bbb = split_result[:, 1]
# 결과를 DataFrame에 추가
df['aaa'] = aaa
df['bbb'] = bbb
print(df)
import numpy as np
import pandas as pd
# 예제 데이터프레임 생성
df = pd.DataFrame({'a': ['A_001', 'B_002', 'C_003']})
# NumPy 배열로 변환
np_array = df['a'].to_numpy()
# '_' 기준으로 문자열 분리
split_result = np.char.split(np_array, sep='_')
# 첫 번째와 두 번째 요소를 추출하여 새로운 NumPy 배열 생성
aaa = np.array([item[0] for item in split_result])
bbb = np.array([item[1] for item in split_result])
# 결과를 DataFrame에 추가
df['aaa'] = aaa
df['bbb'] = bbb
print(df)
import pandas as pd
# 예시 데이터프레임 생성
df = pd.DataFrame({'a': ['foo_bar', 'hello_world', 'example', 'single']})
# 문자열 분할
split_df = df['a'].str.split('_', expand=True)
# NaN인 경우 원본 값으로 채우기
split_df = split_df.fillna(df['a'])
# 새로운 열 추가
df['c'] = split_df[0] # 첫 번째 열
df['d'] = split_df[1] # 두 번째 열 (NaN인 경우 원본 값으로 채워짐)
print(df)
import pandas as pd
# 예시 데이터프레임 생성
df = pd.DataFrame({'a': ['abc@123', 'def$456', 'ghi', 'jkl@789$world', 'mno@123', None]})
# @ 또는 $를 기준으로 분할하고 마지막 부분 추출
df['extracted'] = df['a'].str.split(r'[@$]').str[-1]
# 결과 출력
print(df)
import numpy as np
import pandas as pd
# 예시 데이터프레임 생성
df = pd.DataFrame({'a': ['abc@123', 'def$456@hello', 'ghi', 'jkl@789$world', 'mno', None]})
# numpy 배열로 변환
array_data = df['a'].to_numpy()
# 벡터화된 연산으로 '@' 또는 '$'를 기준으로 분할하고 마지막 부분 반환
split_result = np.array([
x.split('@')[-1].split('$')[-1] # '@'와 '$' 모두 처리
if isinstance(x, str) and ('@' in x or '$' in x) # '@' 또는 '$'가 있는 경우
else x # 그 외 경우 원래 값 유지
for x in array_data
])
# 결과 출력
print(split_result)
import numpy as np
import pandas as pd
# 예시 데이터프레임 생성
df = pd.DataFrame({'a': ['abc@123', 'def@456@hello', 'ghi', 'jkl@789@world', 'mno', None]})
# numpy 배열로 변환
array_data = df['a'].to_numpy()
# 벡터화된 연산으로 '@'를 기준으로 분할하고 마지막 부분 반환
split_result = np.array([x.split('@')[-1] if isinstance(x, str) and '@' in x else x for x in array_data])
# 결과 출력
print(split_result)
import pandas as pd
import numpy as np
# 데이터 생성 함수
def generate_string():
# '::'로 구분된 6개의 랜덤 문자열 생성 (최소 5개의 '::' 포함)
parts = [f"part{i}" for i in range(6)] # 6개의 부분 문자열 생성
return "::".join(parts) # '::'로 연결
# 400만 개의 데이터 생성
num_rows = 4_000_000 # 400만 행
data = {'a': [generate_string() for _ in range(num_rows)]}
# DataFrame 생성
df = pd.DataFrame(data)
# 결과 확인
print(df.head())
chunk_size = 1_000_000 # 청크 크기
result = []
for i in range(0, len(df), chunk_size):
chunk = df.iloc[i:i + chunk_size]
chunk['split_result'] = chunk['a'].str.split('::').str[4]
result.append(chunk)
df = pd.concat(result)
print(df)
import numpy as np
# numpy 배열로 변환
array_data = df['a'].to_numpy()
# numpy 벡터화된 연산
split_result = np.array([x.split('::')[4] if '::' in x else None for x in array_data])
# 결과를 DataFrame에 추가
df['split_result'] = split_result
print(df)
import numpy as np
# Pandas Series를 NumPy 배열로 변환
data = df['a'].astype(str).to_numpy() # 모든 데이터를 문자열로 변환
# 문자열 분할 및 4번째 요소 추출
split_data = np.char.split(data, sep='::') # NumPy의 벡터화된 split 함수
# 4번째 요소 추출 (리스트 길이 확인 후 안전하게 처리)
df['4th_element'] = [
item[3] if len(item) > 3 else None for item in split_data
]
# 문자열이 아닌 데이터는 None으로 처리
split_array = np.array([x.split('_') if isinstance(x, str) else None for x in np_array])
import numpy as np
# numpy 배열로 변환 후 분할
np_array = df['col'].values
split_array = np.array([x.split('_') for x in np_array])
import pandas as pd
import numpy as np
# 예제 데이터 (NaN 포함)
data = {'a': ['A::B::C::D::E', 'F::G::H::I::J', np.nan, 'K::L::M::N::O', 123.45]}
df = pd.DataFrame(data)
# 방법 1: float 타입 데이터를 문자열로 변환
df['a'] = df['a'].astype(str)
result = [x.split('::')[4] if '::' in x else None for x in df['a']]
print(result)