我有一个小样本数据:
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)
Run Code Online (Sandbox Code Playgroud)
好像
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
Run Code Online (Sandbox Code Playgroud)
我想将'V'列拆分为' - '分隔符并将其移动到另一个名为'allele'的列
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
Run Code Online (Sandbox Code Playgroud)
我到目前为止尝试的代码是不完整的,并没有工作:
df1 = pd.DataFrame()
df1[['V']] = pd.DataFrame([ x.split('-') for x in df['V'].tolist() ])
Run Code Online (Sandbox Code Playgroud)
要么
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})
Run Code Online (Sandbox Code Playgroud)
EdC*_*ica 58
使用vectoried str.split有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
Run Code Online (Sandbox Code Playgroud)
使用以下内容:
df['allele'] = [x.split('-')[-1] for x in df['V']]
Run Code Online (Sandbox Code Playgroud)
上述第一部分保留“-”号之后的任何值
df['V'] = [x.split('-')[-0] for x in df['V']]
Run Code Online (Sandbox Code Playgroud)
上面的第二部分保留“-”号之前的任何值并自动替换主列
df.head(3)
Run Code Online (Sandbox Code Playgroud)
要将数据存储到新的数据框中,请使用相同的方法,只是将新的数据框中使用:
tmpDF = pd.DataFrame(columns=['A','B'])
tmpDF[['A','B']] = df['V'].str.split('-', expand=True)
Run Code Online (Sandbox Code Playgroud)
最终(对于我的目的,这更有用)是,如果您只需要获取字符串值的一部分(即'-'之前的文本),则可以使用.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
Run Code Online (Sandbox Code Playgroud)
-根据分隔符“-”将“ V”值拆分为列表,并将第一项存储回该列
| 归档时间: |
|
| 查看次数: |
43512 次 |
| 最近记录: |