【问题标题】:How to extract substring from varible length column in pandas dataframe?如何从熊猫数据框中的可变长度列中提取子字符串?
【发布时间】:2018-11-09 20:51:16
【问题描述】:

您好,我正在尝试通过 python 中的 pandas 数据框中的一列来完成类似于 excel 中的 mid 函数的操作。我有一列包含可变长度的药物名称+强度等。我只想提取名称的第一个“部分”并将结果放入数据框中的另一列。

例子:

数据框列

MEDICATION_NAME 对乙酰氨基酚 325 毫克 a-hydrocort 100 毫克/2 毫升

期望的结果

MEDICATION_NAME GENERIC_NAME 对乙酰氨基酚 325 毫克对乙酰氨基酚 a-hydrocort 100 毫克/2 毫升

我尝试过的

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[:] 
函数?

谢谢

【问题讨论】:

  • 你能提供更多的例子吗?名称是否总是后跟空格和数字,然后是 mg?是否有一些带空格的通用名称?

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以在这里使用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 本身从一个系列中创建一个包含三列的数据框:之前、匹配和之后:

>>> df['MEDICATION_NAME'].str.partition(' ')
               0  1            2
0  acetaminophen          325 mg
1    a-hydrocort     100 mg/2 ml

【讨论】:

    【解决方案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]
    

    【讨论】:

      【解决方案3】:

      使用str.extract 使用完整的正则表达式功能:

      df["GENERIC_NAME"] = df["MEDICATION_NAME"].str.extract(r'([^\s]+)')
      

      这会捕获以空格为界的第一个单词。因此将防止出现先有空间的情况。

      【讨论】:

        【解决方案4】:

        试试这个:

        df['GENERIC_NAME'] = df['MEDICATION_NAME'].str.split(" ")[0]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-31
          • 1970-01-01
          • 2022-11-18
          • 2021-02-11
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          • 2020-06-03
          相关资源
          最近更新 更多