繁体   English   中英

从混合 dtype 列中,从 python pandas 中的特定列值中提取字符串

[英]From a mixed dtype column, extract string from specific column values in python pandas

我的 dataframe 如下所示:

data = {'pred_id':[np.nan, np.nan, 'Pred ID', 258,265,595,658],
        'class':[np.nan,np.nan,np.nan,'pork','sausage','chicken','pork'],
        'image':['Weight',115.37,'pred','app_images/03112020/Prediction/222_prediction_resized.jpg','app_images/03112020/Prediction/333_prediction_resized.jpg','volume',np.nan]}

df = pd.DataFrame(data)
df

编辑:我正在尝试使用列“图像”中的值创建一个新列“图像名称”。 我想从字符串中包含“app_images/”的列“image”值中提取 substring,如果没有,则保持不变。 我尝试了下面的代码及其抛出的“属性错误”消息。

帮助我了解如何找到数据类型,然后从具有“app_images/”的值中提取 substring,如果没有,则保持原值不变。 我不知道如何解决这个问题。 提前致谢。

images = []

for i in df['image']:
    if i.dtypes == object:
        if i.__contains__('app_images/'):
            new = i.split('_')[1]
            name = new.split('/')[3]+'.jpg'
            images.append(name)
        else:
            images.append(i)
        
df['image_name'] = images
df

不要使用循环,使用矢量代码、 str.extract和正则表达式。

从您的描述和代码来看,这似乎是您所期望的:

df['image_name'] = (df['image'].str.extract(r'app_images/.*/(\d+)_[^/]+\.jpg',
                                            expand=False)+'.jpg'
                    )

output:

   pred_id    class                                                      image image_name
0      NaN      NaN                                                     Weight        NaN
1      NaN      NaN                                                     115.37        NaN
2  Pred ID      NaN                                                       pred        NaN
3      258     pork  app_images/03112020/Prediction/222_prediction_resized.jpg    222.jpg
4      265  sausage  app_images/03112020/Prediction/333_prediction_resized.jpg    333.jpg
5      595  chicken                                                     volume        NaN
6      658     pork                                                        NaN        NaN

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM