【问题标题】:escaping square brackets from string in dataframe从数据框中的字符串中转义方括号
【发布时间】:2021-08-28 00:25:57
【问题描述】:

我有一个数据框,我试图从所有列中清除数据。数据中存在一些异常情况,如下所示: "[n], [ta], [cb]" 基本上方括号中的任何内容我都想忽略并用空格替换。 我有这个:

df['data1'] = df['data1'].str.replace(r"\[(n|ta|cb)\]", " ")

这行得通,除了我仍然在数据中得到方括号,但它们只是空的。 不知道如何删除方括号以及其中的字母。也不确定是否有更快的方法在所有列上执行此操作,而不仅仅是一次。

【问题讨论】:

  • 这也应该删除方括号。它应该只留下逗号和空格。
  • 它对我有用...
  • 奇怪的是,即使我逃脱了括号,它也不会为我删除括号。
  • 请发布初始化测试数据框的代码,以便我们都在同一件事上工作。
  • 无法复制。演示pd.DataFrame({"data1":["[n], [ta], [cb]"]})['data1'].str.replace(r"\[(n|ta|cb)\]", " ")[0] 给了我们' , , '。 OP 不会给我们产生问题的数据,所以是时候关闭了。

标签: python regex pandas


【解决方案1】:

它对我有用。我认为你之前得到剩余方括号的原因是因为你没有包含转义字符\(反斜杠)。

df = pd.DataFrame({'data1':['[n], [ta], [cb]']})

没有转义字符:

df['data1'].str.replace(r"[(n|ta|cb)]", " ")

# 0    [ ], [  ], [  ]
# Name: data1, dtype: object

带有转义字符:

df['data1'].str.replace(r"\[(n|ta|cb)\]", " ")

# 0     ,  ,  
# Name: data1, dtype: object

要将其应用于所有列,只需使用 for 循环:

for col in df.columns:
    df[col] = df[col].str.replace(r"\[(n|ta|cb)\]", " ")

【讨论】:

  • 但 OP 清楚地显示了问题中的转义字符。可能是单元格包含 python 列表。如果要对所有列进行替换,可以df = df.replace(r"\[(n|ta|cb)\]", " ", regex=True)
猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 2016-01-13
  • 2011-08-09
  • 1970-01-01
  • 2016-12-30
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多