如何仅提取括号之间的字符串成分?

时间:2019-10-13 02:35:20

标签: python regex pandas etl data-cleaning

我正在寻找一种从数据列中删除特定元素的有效方法。

我有这样的数据:

year
1 (1991)
10 (1991-2001)
8 (1991-1998)
2 (2000-2002)

我想成为这样:

year
1991
1991 - 2001
1991 - 1998
2000 - 2002

我想删除括号前后的括号和元素。

4 个答案:

答案 0 :(得分:2)

使用正则表达式:

  • 使用pandas.Series.str.extract
    • 正则表达式:df <- data.frame( Date = c("27/9/2019", "28/9/2019", "1/10/2019", "2/10/2019"), Var = c("A", "A", "B", "B"), Value = c(56, 50, 90, 100), stringsAsFactors = F )
    • \((.*)\)之间提取内容
()

答案 1 :(得分:1)

您可以使用以下代码

df['year'] = df['year'].str.split('(').str[1].str.strip(')')

输出

    year
0   1991
1   1991-2001
2   1991-1998
3   2000-2002

答案 2 :(得分:0)

怎么样:

df['year'] = df['year'].str[1:-1]

或者更安全,如果您的数据并非总是以'()'开头/结尾:

# str.strip accepts regex
df['year'] = df['year'].str.strip('(|)')

输出:

1          1991
10    1991-2001
8     1991-1998
2     2000-2002
Name: year, dtype: object

答案 3 :(得分:-2)

lines = [
  "year",
  "1 (1991)",
  "10 (1991-2001)",
  "8 (1991-1998)",
  "2 (2000-2002)"
]
formatted_lines = []
for line in lines:
  updated_line = line.split('(') # Splits it into two lines: ["1 ", "1991)"]
  updated_line = updated_line.replace(')') # remove extra parenthesis
  formatted_lines.append(updated_line)