반응형
구분 기호로 판다 데이터 프레임 열 분할
작은 샘플 데이터가 있습니다.
import pandas as pd
df = {'ID': [3009, 129, 119, 120, 121, 122, 130, 3014, 266, 849, 174, 844],
'V': ['IGHV7-B*01', 'IGHV7-B*01', 'IGHV6-A*01', 'GHV6-A*01', 'IGHV6-A*01',
'IGHV6-A*01', 'IGHV4-L*03', 'IGHV4-L*03', 'IGHV5-A*01', 'IGHV5-A*04',
'IGHV6-A*02','IGHV6-A*02'],
'Prob': [1, 1, 0.8, 0.8056, 0.9, 0.805, 1, 1, 0.997, 0.401, 1, 1]}
df = pd.DataFrame(df)
처럼 보인다
df
Out[25]:
ID Prob V
0 3009 1.0000 IGHV7-B*01
1 129 1.0000 IGHV7-B*01
2 119 0.8000 IGHV6-A*01
3 120 0.8056 IGHV6-A*01
4 121 0.9000 IGHV6-A*01
5 122 0.8050 IGHV6-A*01
6 130 1.0000 IGHV4-L*03
7 3014 1.0000 IGHV4-L*03
8 266 0.9970 IGHV5-A*01
9 849 0.4010 IGHV5-A*04
10 174 1.0000 IGHV6-A*02
11 844 1.0000 IGHV6-A*02
'V' 열을 '-' 구분 기호로 나누고 'alle'이라는 다른 열로 이동합니다.
Out[25]:
ID Prob V allele
0 3009 1.0000 IGHV7 B*01
1 129 1.0000 IGHV7 B*01
2 119 0.8000 IGHV6 A*01
3 120 0.8056 IGHV6 A*01
4 121 0.9000 IGHV6 A*01
5 122 0.8050 IGHV6 A*01
6 130 1.0000 IGHV4 L*03
7 3014 1.0000 IGHV4 L*03
8 266 0.9970 IGHV5 A*01
9 849 0.4010 IGHV5 A*04
10 174 1.0000 IGHV6 A*02
11 844 1.0000 IGHV6 A*02
지금까지 시도한 코드가 불완전하고 작동하지 않았습니다.
df1 = pd.DataFrame()
df1[['V']] = pd.DataFrame([ x.split('-') for x in df['V'].tolist() ])
또는
df.add(Series, axis='columns', level = None, fill_value = None)
newdata = df.DataFrame({'V':df['V'].iloc[::2].values,
'Allele': df['V'].iloc[1::2].values})
다음과 함께 벡터화expand=True
:
In [42]:
df[['V','allele']] = df['V'].str.split('-',expand=True)
df
Out[42]:
ID Prob V allele
0 3009 1.0000 IGHV7 B*01
1 129 1.0000 IGHV7 B*01
2 119 0.8000 IGHV6 A*01
3 120 0.8056 GHV6 A*01
4 121 0.9000 IGHV6 A*01
5 122 0.8050 IGHV6 A*01
6 130 1.0000 IGHV4 L*03
7 3014 1.0000 IGHV4 L*03
8 266 0.9970 IGHV5 A*01
9 849 0.4010 IGHV5 A*04
10 174 1.0000 IGHV6 A*02
11 844 1.0000 IGHV6 A*02
데이터를 새 데이터 프레임에 저장하는 경우 새 데이터 프레임과 동일한 접근 방식을 사용합니다.
tmpDF = pd.DataFrame(columns=['A','B'])
tmpDF[['A','B']] = df['V'].str.split('-', expand=True)
결국 문자열 값의 일부(예: '-' 앞의 텍스트)만 가져오면 다음과 같이 .str.split(...).str[idx]를 사용할 수 있습니다.
df['V'] = df['V'].str.split('-').str[0]
df
ID V Prob
0 3009 IGHV7 1.0000
1 129 IGHV7 1.0000
2 119 IGHV6 0.8000
3 120 GHV6 0.8056
구분 기호 '-'에 따라 'V' 값을 목록으로 나누고 첫 번째 항목을 다시 열에 저장합니다.
다음을 사용합니다.
df['allele'] = [x.split('-')[-1] for x in df['V']]
위의 첫 번째 부분은 '-' 기호 뒤에 있는 모든 값을 유지합니다.
df['V'] = [x.split('-')[-0] for x in df['V']]
위의 두 번째 부분은 '-' 기호 앞의 값을 유지하며 주 열을 자동으로 바꿉니다.
df.head(3)
언급URL : https://stackoverflow.com/questions/37333299/splitting-a-pandas-dataframe-column-by-delimiter
반응형
'programing' 카테고리의 다른 글
jquery의 부록이 svg 요소와 함께 작동하지 않습니까? (0) | 2023.08.29 |
---|---|
PHP에서 DEFINE vs 변수 (0) | 2023.08.29 |
WHERE 절은 IN과 JOIN 이전 또는 이후에 더 잘 실행됩니다. (0) | 2023.08.29 |
Powershell의 개별 파일 형식 목록 (0) | 2023.08.29 |
도커 구성을 위해 환경 변수를 전달하는 방법 (0) | 2023.08.29 |