我有一个像df一样的pandas数据框,带有一个列construct_name
construct_name
aaaa_t1_2
cccc_t4_10
bbbb_g3_3
Run Code Online (Sandbox Code Playgroud)
等等.我想首先拆分下划线的所有名称,并将第一个元素(aaaa,cccc等)存储为另一个列名.
预期产出
construct_name name
aaaa_t1_2 aaaa
cccc_t4_10 bbbb
Run Code Online (Sandbox Code Playgroud)
等等.
我尝试了以下内容
df['construct_name'].map(lambda row:row.split("_")),它给了我一个列表
[aaaa,t1,2]
[cccc,t4,10]
Run Code Online (Sandbox Code Playgroud)
等等
但是,当我这样做
df['construct_name'].map(lambda row:row.split("_"))[0]获取列表的第一个元素我得到一个错误.你能建议解决吗?谢谢
EdC*_*ica 30
只需使用矢量化str方法split并在列表上使用整数索引来获取第一个元素:
In [228]:
df['first'] = df['construct_name'].str.split('_').str[0]
df
Out[228]:
construct_name first
0 aaaa_t1_2 aaaa
1 cccc_t4_10 cccc
2 bbbb_g3_3 bbbb
Run Code Online (Sandbox Code Playgroud)
rod*_*ece 11
使用矢量化str.split方法的另一种方法是传递expand=True标志,然后该标志为每个分割部分返回一列。
>>> s = pd.Series( ['aaaa_t1_2', 'cccc_t4_10', 'bbbb_g3_3'], name='construct_name')
>>> s.str.split('_', expand=True) # to see what expand=True does
0 1 2
0 aaaa t1 2
1 cccc t4 10
2 bbbb g3 3
>>> s.str.split('_', expand=True)[0] # what you want, select first elements
0 aaaa
1 cccc
2 bbbb
Run Code Online (Sandbox Code Playgroud)
例如,如果您想保留第一个和第二个值,这将特别有用。
就标志的一般行为而言expand=True,请注意,如果输入字符串没有相同数量的下划线,您将无法得到Nones:
>>> s = pd.Series( ['aaaa_t1_2', 'cccc_t4', 'bbbb_g33'], name='construct_name')
>>> s.str.split('_', expand=True)
0 1 2
0 aaaa t1 2
1 cccc t4 None
2 bbbb g33 None
Run Code Online (Sandbox Code Playgroud)
df['name'] = df['construct_name'].str.split('_').str.get(0)
Run Code Online (Sandbox Code Playgroud)
或者
df['name'] = df['construct_name'].str.split('_').apply(lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8797 次 |
| 最近记录: |