首页 > 解决方案 > 遍历列,查找选择,创建新列

问题描述

我正在尝试对网站进行 webscraep 并创建名称和图像链接的数据框。但是在我解析名称时存在一些问题。

我的数据框看起来像这样;

color    gender    model1    model2  extra_col1  extra_col2    extra_col3
black    male       A24      B2       
red      woman      A1       B3
19sf     black      male     A22        B1
deep     1909sf     2202     blue       woman         A1          B22   

前两行是正确的。我想遍历这 7 列并正确找到颜色、性别和模型并创建新列;

最后下表是我想要的;

color    gender    model1    model2     
black    male       A24      B2                                           
red      woman      A1       B3
black    male       A22      B1
blue     woman      A1       B22

我有颜色、性别、模型1、模型2的唯一值列表我需要比较该特定列中的每个元素并与列表匹配并在颜色列、性别列等中写入正确的元素。

谢谢你。

标签: pythonstringpandasfor-loop

解决方案


嗯,肯定不干净。专业人士肯定会有他们的Python担忧,但由于我是新手,Python所以Pandas我只是尝试使用一些Join,Regular ExpressionsSplit

import pandas as pd
df = pd.DataFrame({'color':['black','red','19sf','deep'],
                   'gender':['male','woman','black','1909sf'],
                   'model1':['A24','A1','Male','2202'],
                   'model2':['B2','B3','A22','blue'],
                   'extra_col1':['','','B1','woman'],
                   'extra_col2':['','','','A1'],
                   'extra_col3':['','','','B22']})
df = df[df.columns[0:]].apply(lambda x: '|'.join(x.dropna().astype(str)), axis=1)
df = df.replace(r'.*?((?:\w+\|){3}\w+(?=\|*$)).*', value = r'\1', regex = True)
df = df.str.split('|', expand = True)
df.columns = ['color','gender','model1','model2']
print(df)

再说一次,虽然我对外面的编程VBA很陌生,但它确实可以完成这项工作,但可能会做得更整洁。手指交叉它对你有用=)


推荐阅读