아미(아름다운미소)

splite 본문

랭귀지/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)
Comments