如何清理字符串并在列中只保留人名?

时间:2018-02-24 22:15:41

标签: python python-3.x pandas data-cleaning

我正在处理一个CSV文件,该文件显示了2018年的总统会议.CSV说明了总统所做的事情以及他当天会见的人。每一行都是他的日程安排。

我有一个名为“oque”的列(或原始数据集中的“ReuniãoMinisterial”),其值为字符串。但我想只保留人名(名字,中间名和姓)。

所以带有人名的第一行有以下内容:

Eliseu Padilha, ministro-chefe da Casa Civil; Henrique Meirelles, ministro de Estado da Fazenda; Ronaldo Nogueira, ministro de Estado do Trabalho; Antônio Neto, presidente das Centrais Sindicais Brasileiras; José Calixto Ramos, presidente Nacional da NCST; Ricardo Patah, presidente Nacional UGT; Deputado Federal Paulo Pereira da Silva, Presidente Nacional da Central Força Sindical e Presidente Nacional do Partido Solidariedade

它应该只显示:Eliseu Padilha,Henrique Meirelles,Ronaldo Nogueira,AntônioNeto,JoséCalixtoRamos,Ricardo Patah,Paulo Pereira da Silva。

数据集位于以下链接:https://gist.github.com/gabrielacaesar/af8835a0a1c01d16f48f0a7336a8d3f0

我的熊猫分析在以下链接中: https://github.com/gabrielacaesar/studyingPython/blob/master/pandas-analysis/jupyter-notebook-president-schedule-pandas-analysis.ipynb

2 个答案:

答案 0 :(得分:0)

这是一种方法,认为它不是很简单。我们的想法是首先在分号上拆分字符串,然后在每个字符串上应用str.extract以仅提取逗号之前的字符串。

df['Name'].str.split(';', expand = True)\
.apply(lambda x: ','.join(x.str.extract('([A-Za-z ]+),', expand = False)), axis = 1)

答案 1 :(得分:0)

要获得所需的结果,您可以使用列表推导并在按;,拆分后提取第一个元素。

使用re库删除标题。

import pandas as pd
import re

s = 'Eliseu Padilha, ministro-chefe da Casa Civil; Henrique Meirelles, \
ministro de Estado da Fazenda; Ronaldo Nogueira, ministro de Estado do\
Trabalho; Antônio Neto, presidente das Centrais Sindicais Brasileiras; José \
Calixto Ramos, presidente Nacional da NCST; Ricardo Patah, presidente Nacional\
UGT; Deputado Federal Paulo Pereira da Silva, Presidente Nacional da Central Força\
Sindical e Presidente Nacional do Partido Solidariedade'

# Recreate dataframe with string (s) two times
df = pd.DataFrame(dict(oque=[s,s]))

titles = ['Deputado Federal ','General ']

df['oque'] = (df['oque'].apply(lambda x: 
              [re.sub('|'.join(titles),'',i.split(', ')[0]) for i in x.split('; ')]))

# Print first row
print(df['oque'][0])

返回:

['Eliseu Padilha',
 'Henrique Meirelles',
 'Ronaldo Nogueira',
 'Antônio Neto',
 'José Calixto Ramos',
 'Ricardo Patah',
 'Paulo Pereira da Silva']