如果 str.contains() 对数据帧的内容有条件;属性错误:"str"对象没有属性"str"


def store_press_release_links(all_sublinks_df, column_names):
all_press_release_links_df = pd.DataFrame(columns=column_names)
for i in range(len(all_sublinks_df)):
if (len(all_sublinks_df.loc[i,'sub_link'].str.contains('press|releases|Press|Releases|PRESS|RELEASES'))>0):
all_press_release_links_df.loc[i, 'link'] = all_sublinks_df[i,'link']
all_press_release_links_df.loc[i, 'sub_link'] = all_sublinks_df[i,'sublink']
else:
continue

all_press_release_links_df = all_press_release_links_df.drop_duplicates()
all_press_release_links_df.reset_index(drop=True, inplace=True)
return all_press_release_links_df

store_press_release_links()是一个接受数据帧all_subinks_df的函数,它有两列。1. 链接2。sub_link这两列的内容都是链接名。我想逐个查看all_subinks_df Dataframe的sub_link列中存在的所有链接名称,并检查链接是否包含关键字' press|releases| press|releases| press|releases '。如果是这样,那么我想将all_subinks_df数据框的整行存储到一个新的数据框all_press_release_links_df中。但是当我运行这个函数时,它给出了错误:AttributeError: 'str'对象没有属性'str'

我哪里错了?

我觉得你应该用

来代替循环
all_press_release_links_df = all_sublinks_df[all_sublinks_df['sub_link'].str.contains('press|releases|Press|Releases|PRESS|RELEASES')]

这里有很多不对的地方。几乎没有任何情况需要循环遍历pandas数据框,同样也几乎没有任何情况需要逐行构建pandas数据框。

在这里,整个操作可以通过单个操作完成(为了可读性,分成两行),如下所示:

def store_press_release_links(all_sublinks_df):
check_str = 'press|releases|Press|Releases|PRESS|RELEASES'
return all_sublinks_df[all_sublinks_df.link.str.contains(check_str)]

出现错误消息的原因是您选择了数据框的单个单元格,而这些单元格不是pandas.Series类型的。str属性是一个pd。系列财产。

还要注意columns字段是如何不再需要的。

相关内容

  • 没有找到相关文章

最新更新