【问题标题】:Removing characters from a dataframe column从数据框列中删除字符
【发布时间】:2017-09-07 17:12:43
【问题描述】:

下面是从类别列表和数据集中提取匹配值的代码。

matches= token.apply(lambda x: pd.Series(x).str.extractall("|".join(["({})".format(cat) for cat in Categories.HealthCare])))
match_list= [[m for m in match.values.ravel() if isinstance(m, str)] for match in matches]
match_df = pd.DataFrame({"Hc1":match_list})

def match_health(row):
    categories = []

    for bigram in row.bigram:
        joined = ' '.join(bigram)
        if joined in HealthCare:
            categories.append(joined)
    for trigram in row.trigram:
        joined = ' '.join(trigram)
        if joined in HealthCare:
            categories.append(joined)

    return categories

match_df['Hc2'] = df.apply(match_health, axis=1)
match_df['HealthCare'] = match_df[match_df.columns[[0,1]]].apply(lambda x: ','.join(x.dropna().astype(str)),axis=1)

产生以下结果:

    Hc1                 Hc2                         HealthCare
0   []                  []                          [],[]
1   [Sauna, Jacuzzi]    [Health Club, Steam Room]   ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro...
2   [Sauna, Jacuzzi]    [Health Club, Steam Room]   ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro...
3   [Sauna, Jacuzzi]    [Health Club, Steam Room]   ['Sauna', 'Jacuzzi'],['Health Club', 'Steam Ro...

类型(match_df)

pandas.core.frame.DataFrame

但我的输出应该没有'[]' - 方括号和字符串周围的单引号,例如:

    Hc1                 Hc2                         HealthCare
0                                                   
1   Sauna, Jacuzzi   Health Club, Steam Room    Sauna,Jacuzzi,Health Club,Steam Ro...
2   Sauna, Jacuzzi   Health Club, Steam Room    Sauna,Jacuzzi,Health Club,Steam Ro...
3   Sauna, Jacuzzi   Health Club, Steam Room    Sauna,Jacuzzi,Health Club,Steam Ro...

需要帮助。

【问题讨论】:

  • 仅将 [ ] 和 ' 替换为空格或仅删除它们不够吗?
  • 是的,用逗号分隔符替换它也可以完成工作
  • match_df['HealthCare'] = match_df['HealthCare'].map(lambda x: x.replace('[','').replace(']','').replace ("'",'')) 这有效,但仅适用于数据框列。你知道如何一次将它应用到整个数据帧吗?

标签: python regex python-3.x pandas dataframe


【解决方案1】:

您可以拨打.str.replace:

match_df['HealthCare'] = match_df['HealthCare']\
                          .astype(str).str.replace(r"[\[\]']", '')

【讨论】:

  • 我试过但不成功。 match_df = match_df.applymap(lambda x: x.translate(tab)) match_df AttributeError: ("'list' object has no attribute 'translate'", '发生在索引 Hc1')
  • @RajithaNaik 为什么不成功?如果它对我有用,它可能对你有用。
  • 我使用了 maketrans ,最初我得到了这个错误:即使从字符串导入后也找不到名称 maketrans,现在 'list' 对象没有属性 'translate''。可能我不清楚如何在我的代码中应用这些功能。
  • @RajithaNaik 现在试试这个。它应该比您的解决方案快得多。
  • @RajithaNaik 你有一些选择。您可以使用循环并为每一列调用相同的代码。您也可以使用 applymap 并替换,但这可能会更慢,即使没有循环。
【解决方案2】:
match_df['HealthCare'] = match_df['HealthCare'].map(lambda x: x.replace('[','').replace(']','').replace("'",''))

这适用于替换所有方括号和单引号。

O/P:

      HealthCare
0                                                   
1   Sauna,Jacuzzi,Health Club,Steam Ro...
2   Sauna,Jacuzzi,Health Club,Steam Ro...
3   Sauna,Jacuzzi,Health Club,Steam Ro...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多