如何从熊猫数据框中的可变长度列中提取子字符串?

时间:2018-11-09 20:51:17

标签: python python-3.x pandas dataframe

您好,我正在尝试用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[:] 
函数?

谢谢

4 个答案:

答案 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]