regex - 根据其他列向 Panda 数据框添加新列

标签 regex python-3.x pandas dataframe

我正在尝试向 Panda 数据集添加一个新列。
这个新列 df['Year_Prod'] 派生自另一个 df['title'] 我从中提取年份。

数据示例:

country    designation     title
Italy      Vulkà Bianco    Nicosia 2013 Vulkà Bianco (Etna)         
Portugal   Avidagos        Quinta dos Avidagos 2011 Avidagos Red (Douro)      

代码:
import re

import pandas as pd

df=pd.read_csv(r'test.csv', index_col=0)

df['Year_Prod']=re.findall('\\d+', df['title'])

print(df.head(10))

我收到以下错误:
 File "C:\Python37\lib\site-packages\pandas\core\frame.py", line 3119, in __setitem__self._set_item(key, value)

  File "C:\Python37\lib\site-packages\pandas\core\frame.py", line 3194, in _set_item value = self._sanitize_column(key, value)

  File "C:\Python37\lib\site-packages\pandas\core\frame.py", line 3391, in _sanitize_column value = _sanitize_index(value, self.index, copy=False)

  File "C:\Python37\lib\site-packages\pandas\core\series.py", line 4001, in _sanitize_index raise ValueError('Length of values does not match length of ' 'index')

**ValueError: Length of values does not match length of index**

请让我知道您对此的看法,谢谢。

最佳答案

您可以使用 Pandas str.extract

df['Year_Prod']= df.title.str.extract('(\d{4})')

    country     designation     title                                          Year_Prod
0   Italy       Vulkà Bianco    Nicosia 2013 Vulkà Bianco (Etna)                2013
1   Portugal    Avidagos        Quinta dos Avidagos 2011 Avidagos Red (Douro)   2011

编辑:正如@Paul H. 在评论中所建议的,您的代码不起作用的原因是 re.findall 需要一个字符串,但您正在传递一个系列。可以使用 apply 来完成,其中在每一行,传递的值是一个字符串,但没有多大意义,因为 str.extract 更有效。
df.title.apply(lambda x: re.findall('\d{4}', x)[0])

关于regex - 根据其他列向 Panda 数据框添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53088805/

相关文章:

python - 正则表达式:验证没有查询参数的 URL 路径

python - Python 中模式匹配和替换的更好方法是什么?

python - 从普通函数调用生成器函数

python - 通过 subprocess.communicate 在 python 脚本之间传输 pickled 对象输出

python - 将字典值映射到 Pandas 数据框中的列表

regex - 将正则表达式与 `rename` 中的 `util-linux` 版本一起使用

regex - Goa 包的类型断言 (uuid.UUID)

"default"条件语句的 Pythonic 方式?

python - 在 Pandas 的指定时间间隔内重新采样?

python - 根据日期列在 pandas Dataframe 中插入行