【问题标题】:How do I apply the string split method on a pandas dataframe based on a condition?如何根据条件在 pandas 数据帧上应用字符串拆分方法?
【发布时间】:2020-05-01 10:26:24
【问题描述】:

我想替换我的数据框中以错误格式输入的一些值。例如,850/07-498745 应该是 07-498745。现在,我成功地使用了字符串拆分来做到这一点。但是,它将所有以前正确格式化的字符串转换为 NaN。我试图基于一个条件,但我仍然有同样的问题。我该如何解决?

示例输入:

mylist = ['850/07-498745', '850/07-148465', '07-499015']
df = pd.DataFrame(mylist)
df.rename(columns={ df.columns[0]: "mycolumn" }, inplace = True)

我的尝试:

df['mycolumn'] = df[df.mycolumn.str.contains('/') == True].mycolumn.str.split('/', 1).str[1]
df

输出:

我想要什么:

【问题讨论】:

  • 按照您的逻辑,它将是:df.loc[df.mycolumn.str.contains('/'), 'mycolumn'] = df.mycolumn.str.split('/').str[1]。但在这种情况下,anky_91 的答案更有意义。

标签: python string pandas split data-cleaning


【解决方案1】:

这也可以,并且可以帮助您理解为什么您最初的尝试没有:

mask = df.mycolumn.str.contains('/')
df.mycolumn.loc[mask] = df.mycolumn[mask].str.split('/', 1).str[1]

你在做df['mycolumn'] = ...,我相信这只是用你形成的新系列替换了该列的整个系列。

【讨论】:

    【解决方案2】:

    对于正则表达式解决方案:

    df.mycolumn.str.extract('(?:.*/)?(.*)$')[0]
    

    输出:

    0    07-498745
    1    07-148465
    2    07-499015
    Name: 0, dtype: object
    

    【讨论】:

      【解决方案3】:

      您可以使用split/ 并从列表中获取最后一个返回字符串:

      df['mycolumn'].str.split('/').str[-1]
      
      0    07-498745
      1    07-148465
      2    07-499015
      Name: mycolumn, dtype: object
      

      【讨论】:

        猜你喜欢
        • 2021-04-16
        • 2021-07-21
        • 2022-08-16
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 2015-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多