【问题标题】:Extracting specific values from a pandas columns and storing it in new columns从熊猫列中提取特定值并将其存储在新列中
【发布时间】:2021-05-13 08:52:36
【问题描述】:

我有一个 pandas 列,它以以下格式的列表形式存储数据:

text
[['Mark','PERSON'],['Data Scientist','TITLE'], ['Berlin','LOC'], ['Python','SKILLS'], ['Tableau,','SKILLS'], ['SQL','SKILLS'], ['AWS','SKILLS']]
[['John','PERSON'],['Data Engineer','TITLE'], ['London','LOC'], ['Python','SKILLS'], ['DB2,','SKILLS'], ['SQL','SKILLS']
[['Pearson','PERSON'],['Intern','TITLE'], ['Barcelona','LOC'], ['Python','SKILLS'], ['Excel,','SKILLS'], ['SQL','SKILLS']
[['Broody','PERSON'],['Manager','TITLE'], ['Barcelona','LOC'], ['Team Management','SKILLS'], ['Excel,','SKILLS'], ['Good Communications','SKILLS']
[['Rita','PERSON'],['Software Developer','TITLE'], ['London','LOC'], ['Dot Net','SKILLS'], ['SQl Server,','SKILLS'], ['VS Code,'SKILLS']

我想看到的输出是:

PERSON    TITLE                 LOC         SKILLS       
Mark      Data Scientist        Berlin      Python, Tableau, SQL, AWS
John      Data Engineer         London      Python, DB2,SQL

.....对于其余的输入行,以此类推

所以本质上是用“,”分割数据,并将“,”之前的左侧部分存储为列标题,将“,”的右侧部分存储为值。

我怎样才能做到这一点?

【问题讨论】:

    标签: python-3.x pandas list split


    【解决方案1】:
    • 如果您有这样的数据框,请将其命名为“df”:
    
       index    text
    0    1     [[Mark, PERSON], [Data Scientist, TITLE], [Ber...
    1    2     [[John, PERSON], [Data Engineer, TITLE], [Lond...
    2    3     [[Pearson, PERSON], [Intern, TITLE], [Barcelon...
    3    4     [[Broody, PERSON], [Manager, TITLE], [Barcelon...
    4    5     [[Rita, PERSON], [Software Developer, TITLE], ...
    
    • 您可以尝试类似的方法:
    person=[]
    skills=[]
    title=[]
    loc=[]
    temp=[]
    
    for i in range(len(df['text'])):
        
        for j in range(len(df['text'][i])):
            
            if df['text'][i][j][1]=='PERSON':
                
                person.append(df['text'][i][j][0])
            
            elif df['text'][i][j][1]=='TITLE':
                
                title.append(df['text'][i][j][0])
            
            elif df['text'][i][j][1]=='LOC':
                
                loc.append(df['text'][i][j][0])
            
            elif df['text'][i][j][1]=='SKILLS':
                
                temp.append(df['text'][i][j][0].replace(",", ""))
        
        skills.append(",".join(temp))
        temp=[]
    
    
    • 输出
        PERSON  TITLE              LOC           SKILLS
    0   Mark    Data Scientist    Berlin    Python,Tableau,SQL,AWS
    1   John    Data Engineer     London    Python,DB2,SQL
    2   Pearson Intern            Barcelona Python,Excel,SQL
    3   Broody  Manager           Barcelona Team Management,Excel,Good Communications
    4   Rita    Software Developer London   Dot Net,SQl Server,VS Code
    

    【讨论】:

    • 信息根据我的要求正确存储在所有列表中,但为了清楚起见,如果我运行上面的代码让我们说 1000 行看起来相似的文本,那么只需将列表分配给一个新的数据框列会给我想要的输出,对吗?比如 df['Skills] = Skills ,df['location']= loc ?
    • 当然可以,但是如果您愿意,可以给我看一下您的数据框的前 5 个,以便验证您需要的程序吗?
    • 嘿!我已经更新了我的输入。也许如果你现在想试一试?我在那里添加了五个虚拟行。谢谢!
    • 嘿@Django0602,我试过了,可以说有效,希望对你有帮助,祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2020-10-01
    • 2021-01-14
    • 2019-05-02
    • 2016-12-01
    • 2022-10-15
    相关资源
    最近更新 更多