아미(아름다운미소)

splite 본문

랭귀지/pandas

splite

유키공 2025. 3. 13. 09:15
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