您好,我正在尝试用python中的pandas数据框中的一列来完成类似于excel中的mid函数的操作。我有一列药物名称+强度等长度可变的列。我只想提取名称的第一个“部分”并将结果放入数据框中的另一列。
示例:
数据框列
MEDICATION_NAME acetaminophen 325 mg a-hydrocort 100 mg/2 ml
所需结果
MEDICATION_NAME GENERIC_NAME acetaminophen 325 mg acetaminophen a-hydrocort 100 mg/2 ml a-hydrocort
我尝试过的
df['GENERIC_NAME'] = df['MEDICATION_NAME'].str[:df['MEDICATION_NAME'].apply(lambda x: x.find(' '))]
基本上我想应用
的行特定结果df['GENERIC_NAME'] = df['MEDICATION_NAME'].apply(lambda x: x.find(' '))
到
str[:]函数?
谢谢
答案 0 :(得分:3)
您可以在此处使用str.partition
[pandas-doc
]:
df['GENERIC_NAME'] = df['MEDICATION_NAME'].str.partition(' ')[0]
对于给定的列,它给出:
>>> g.str.partition(' ')[0]
0 acetaminophen
1 a-hydrocort
Name: 0, dtype: object
partition
本身从一系列数据创建具有三列的数据框:before,match和after:
>>> df['MEDICATION_NAME'].str.partition(' ')
0 1 2
0 acetaminophen 325 mg
1 a-hydrocort 100 mg/2 ml
答案 1 :(得分:2)
使用str.split
df['MEDICATION_NAME'].str.split(n=1).str[0]
Out[345]:
0 acetaminophen
1 a-hydrocort
Name: MEDICATION_NAME, dtype: object
#df['GENERIC_NAME']=df['MEDICATION_NAME'].str.split(n=1).str[0]
答案 2 :(得分:1)
使用str.extract
来使用完整的正则表达式功能:
df["GENERIC_NAME"] = df["MEDICATION_NAME"].str.extract(r'([^\s]+)')
此命令捕获由空格限制的第一个单词。因此,将防止出现先有空格的情况。
答案 3 :(得分:1)
尝试一下:
df['GENERIC_NAME'] = df['MEDICATION_NAME'].str.split(" ")[0]