【问题标题】:Pandas : Valid regex doesn't seem to work with str.extract on dataframePandas:有效的正则表达式似乎不适用于数据帧上的 str.extract
【发布时间】:2021-08-30 22:13:17
【问题描述】:

我有这个包含美国总统数据的 csv 文件。我被困在我有一个专栏 (Age atstart of presidency) 的地方,该专栏将总统任期开始时的年龄和总统任期开始的日期串联在一起。所以我想出了一个将它们分开的正则表达式,并且我可以工作(在 regex101 上测试)并且在使用单个系列对象进行测试时,但是当我将它传递给整个数据框时它似乎不起作用。

简而言之,我有一个名为Age atstart of presidency 的列,其中包含57 years, 67 daysApr 30, 1789 之类的数据,我的工作是区分年龄和日期。 即-

age                       date
57 years, 67 days      Apr 30, 1789

但问题是正则表达式不适用于整个数据框,但在我传递单个系列对象时有效(我觉得这很奇怪,因为当我指定像 df['cName'] 这样的列时,我在技术上进行操作在底层 Series 对象上。我说的对吗?)

这里是代码-

import pandas as pd


df = pd.read_csv("datasets/presidents.csv")
pattern = r"(?P<age>.+ days)(?P<start>.+ \w{4})"

s = pd.Series({'date' : '57 years, 67 daysApr 30, 1789'})

print(s.str.extract(pattern))             #this works 
print('--'*10)
print(df['Age atstart of presidency'].str.extract(pattern).head())   #doesn't work

输出 -

                    age         start
date  57 years, 67 days  Apr 30, 1789
----------------------
   age start
0  NaN   NaN
1  NaN   NaN
2  NaN   NaN
3  NaN   NaN
4  NaN   NaN

如果有人需要我正在处理的数据集 - https://file.re/2021/06/14/presidents/

【问题讨论】:

  • 为我工作。如果您仍然有问题,请确保创建一个可重现的示例。
  • 嘿,如何为您工作?导入我链接的 csv 文件时在数据框上?或在单个系列对象s??
  • 两者都对我有用 - 我从您提供的链接中复制了 csv 文件
  • 也为我工作。万一出现问题,请尝试df = pd.DataFrame({'date' : ['57 years, 67 daysApr 30, 1789']})df=df.assign(Age=df['date'].str.split('days').str[0]+'days', startdate=df['date'].str.split('days').str[1])
  • @Psidom 这怎么可能?我在两台机器上试过,总是得到nan

标签: python regex pandas dataframe csv


【解决方案1】:

找到了解决方案,正如@Psidom 指出的那样,我从我发布的链接中复制了预览窗口中的数据并将其粘贴到一个新的 csv 文件中并导入了它。在上面运行相同的代码,它神奇地工作。 我仍然没有得到问题的原因,但它已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2020-01-03
    相关资源
    最近更新 更多