如果列值以pandas数据框开头/匹配字符串,则替换列值

时间:2019-07-30 19:02:53

标签: python pandas dataframe

我在数据框prices_df中有一列为thumbnail_url

    zipcode thumbnail_url
0   11201   https://a0.muscache.com/im/pictures/6d7cbbf7-c...
1   10019   0
2   10027   https://a0.muscache.com/im/pictures/6fae5362-9...
3   94117   https://a0.muscache.com/im/pictures/72208dad-9...
4   20009   0
5   94131   https://a0.muscache.com/im/pictures/82509143-4...

我需要替换所有,其中包含https://,或者说包含.com(带数字)值1。

zipcode thumbnail_url
0   11201   1
1   10019   0
2   10027   1

尝试过

img_Uploaded = prices_df['thumbnail_url'].str.contains("http") == True
prices_df.replace(to_replace=prices_df[img_Uploaded],value=1,inplace=True)

我的数据框的形状为(74111, 2)

这行代码花费太多时间,我的系统冻结了。 有人可以建议一个更好的矢量化操作并对其进行解释。

我的问题已解决 我很好奇我的代码出了什么问题?除了它没有使用向量化操作进行优化之外,还包括以下事实:它应该仍然运行正确吗?还是这就是为什么它冻结而无法运行,而下面建议的代码却在几秒钟内运行的原因

2 个答案:

答案 0 :(得分:1)

您可以使用apply()函数来完成此操作:

prices_df.thumbnail_url = prices_df.thumbnail_url.apply(lambda url: 1 if 'http' in str(url) else url)

答案 1 :(得分:0)

您可以使用lambda表达式

prices[['thumbnail_url']] = prices[['thumbnail_url']].apply(lambda x: 1 if 'https://' in str(x) else 0)
  

它们是创建匿名函数的简写;表达式lambda参数:表达式产生一个函数对象。未命名对象的行为类似于使用

定义的功能对象

这里的doc