首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将解析函数应用于Pandas DataFrame

将解析函数应用于Pandas DataFrame
EN

Stack Overflow用户
提问于 2020-03-21 07:03:56
回答 1查看 362关注 0票数 0

我有以下DF:

代码语言:javascript
运行
复制
pd.DataFrame({'Data': ['Nov, 2018', '20 Sep 2019\xa0android-3','12 Nov 2019android-3', '11 Jun 2019roku-3\xa011 Sep 2019', 
                       '11 Jun 2019roku-3\xa011 Sep 2019', '06 Jan 2020\xa0android-3', '19 Dec 2019\xa0android-3',
                       '12 Nov 2019\xa0apple-4', '22 Nov 2019\xa0apple-4', '11 Jul 2019\xa0x1-2']})

我正在尝试创建第二列,该列仅由每行中的平台组成,没有日期。为此,我有一个名为extract_date()的函数

代码语言:javascript
运行
复制
def extract_date(date):
    val  = re.findall('\d{2} \w{3} \d{4}', date)
    if len(val) == 1:
        return val[0]
    else:
        return val

当我在一个单独的字符串上运行这个函数时,我能够得到我想要的结果:

代码语言:javascript
运行
复制
s = '27 Feb 2020 roku-5.002 Mar 2020 roku-5.0.1'
mydict = dict.fromkeys(extract_date(s), '')
for k, v in mydict.items():
    s = s.replace(k, v).strip()

'roku-5.0 roku-5.0.1'

但是,当我试图将其应用于数据列时,结果并不相同:

代码语言:javascript
运行
复制
def strip_dates(x):
    if type(x) == float:
        return x
    else:
        mydict = dict.fromkeys(extract_date(x), '')
        for k, v in mydict.items():
            return x.replace(k, v).strip()

df['Data Text'] = df.apply(lambda row: strip_dates(row['Data']), axis=1)


                                 Data                Data Text
0                           Nov, 2018                     None
1               20 Sep 2019 android-3      0 Sep 019 android-3
2                12 Nov 2019android-3       2 Nov 209android-3
3       11 Jun 2019roku-3 11 Sep 2019       roku-3 11 Sep 2019
4       11 Jun 2019roku-3 11 Sep 2019       roku-3 11 Sep 2019

有人能告诉我在应用这个函数时我的方法有什么问题吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-21 07:11:32

在你的职能中:

代码语言:javascript
运行
复制
def strip_dates(x):
    if type(x) == float:
        return x
    else:
        mydict = dict.fromkeys(extract_date(x), '')
        for k, v in mydict.items():
            return x.replace(k, v).strip()

mydict字典项的第一个循环中立即返回:

代码语言:javascript
运行
复制
return x.replace(k, v).strip()

改为:

代码语言:javascript
运行
复制
def strip_dates(x):
    if type(x) == float:
        return x
    else:
        mydict = dict.fromkeys(extract_date(x), '')
        s = str(x)
        for k, v in mydict.items():
             s = s.replace(k, v).strip()
        return s

如您所见,我重用了您更改的函数中的行,从而实现了s = str(x)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60785281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档