微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 正确地做Pandas …而不是使用循环

我刚刚开始使用Pandas,我发现很难对待像数据帧这样的数据帧.每隔一段时间,我就无法解决如何在不迭代行的情况下做某事.

例如,我有一个包含预算信息的数据框.我想从’简短描述’中提取’供应商’,这是一个三种可能形式之一的字符串:

> blah blah blah to vendor name
> blah blah blah at vendor name
>供应商名称

我可以使用以下代码执行此操作,但我不禁觉得它没有正确使用Pandas.有什么想改善吗?

for i, row in dataframe.iterrows():
    current = dataframe['short description'][i]
    if 'to' in current:
        point_of_break = current.index('to') + 3
        dataframe['vendor'][i] = current[point_of_break:]
    elif 'at' in current:
        point_of_break = current.index('at') + 3
        dataframe['vendor'][i] = current[point_of_break:]
    else:
        dataframe['vendor'][i] = current

解决方法:

我想你可以使用str.split by to或at然后用str [-1]选择list的最后一个值:

我实施了这个solution.

df = pd.DataFrame({'A':['blah blah blah to "vendor name"',
                        'blah blah blah at "vendor name"',
                        '"vendor name"']})
print (df)

                                 A
0  blah blah blah to "vendor name"
1  blah blah blah at "vendor name"
2                    "vendor name"

print (df.A.str.split('[at|to]\s+'))
0    [blah blah blah t, "vendor name"]
1    [blah blah blah a, "vendor name"]
2                      ["vendor name"]
Name: A, dtype: object

df['vendor'] = df.A.str.split('(at|to) *').str[-1]
print (df)
                                 A          vendor
0  blah blah blah to "vendor name"   "vendor name"
1  blah blah blah at "vendor name"   "vendor name"
2                    "vendor name"   "vendor name"

或者使用:

df['vendor'] = df.A.str.split('[at|to]\s+').str[-1]
print (df)
                                 A         vendor
0  blah blah blah to "vendor name"  "vendor name"
1  blah blah blah at "vendor name"  "vendor name"
2                    "vendor name"  "vendor name"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐