[Prática de Engenharia] Registros usando pandas

prefácio

        Ao processar dados no trabalho, muitas vezes é necessário usar pandas e registrar alguns hábitos de uso de pandas no trabalho.

1. Mesclar dados

#读取原始数据
data1 = pd.read_excel('/home/zhenhengdong/WORk/Classfier/Dates/Original/1.xlsx')
data2 = pd.read_excel('/home/zhenhengdong/WORk/Classfier/Dates/Original/2.xlsx')
data3 = pd.read_excel('/home/zhenhengdong/WORk/Classfier/Dates/Original/3.xlsx')
data4 = pd.read_excel('/home/zhenhengdong/WORk/Classfier/Dates/Original/20230712.xlsx')
#新建data
data  = pd.DataFrame()
#有选择的将原始数据进行合并
data['序号'] = pd.concat([data4['序号'],data3['序号'],data1['序号'],data2['序号']], ignore_index=False)
data['内容'] = pd.concat([data4['内容'],data3['内容'],data1['内容'],data2['内容']], ignore_index=False)
data['一级分类'] = pd.concat([data4['一级分类'],data3['一级分类'],data1['一级分类'],data2['一级分类']], ignore_index=False)
data['二级分类'] = pd.concat([data4['二级分类'],data3['二级分类'],data1['二级分类'],data2['二级分类']], ignore_index=False)
data['反馈类型'] = pd.concat([data4['反馈类型'],data3['反馈类型'],data1['反馈类型'],data2['反馈类型']], ignore_index=False)

2. Exclua dados

2.1 Excluir linha

        O parâmetro index especifica a linha a ser excluída e o parâmetro inplace indica se deve operar no conjunto de dados original.

#根据行索引删除行
data.drop(index=[0, 4], inplace=True)

2.2 Excluir coluna

        O parâmetro columns especifica as colunas a serem excluídas e o parâmetro inplace indica se deve operar no conjunto de dados original.

#根据列名称删除列
data.drop(columns=['class'], inplace=True)

         Você também pode usar del para excluir.

 del data['class']

2.3 Excluir linhas duplicadas

        O parâmetro subset especifica as colunas que precisam ser verificadas quanto a duplicatas e o valor padrão é todas as colunas. O parâmetro inplace indica se deve operar no conjunto de dados original. keep=last significa manter a última linha duplicada e keep=first significa manter a primeira linha duplicada.

data.drop_duplicates(subset="gender", inplace=True,keep='last')

2.4 Excluir linhas ausentes

        eixo: eixo. 0 ou 'índice' significa exclusão por linha; 1 ou 'colunas' significa exclusão por coluna.

        como: método de filtro. 'qualquer' significa que, desde que a linha/coluna tenha mais de um valor nulo, a linha/coluna será excluída; 'todos' significa que a linha/coluna contém todos valores nulos e a linha/coluna será excluída.

        thresh: Número mínimo de elementos não vazios. tipo int, o padrão é Nenhum. Se o número de elementos não vazios na linha/coluna for menor que esse valor, exclua a linha/coluna.

        subconjunto: subconjunto. Uma lista cujos elementos são índices de linha ou coluna. Se eixo=0 ou 'índice', os elementos do subconjunto são o índice da coluna; se eixo=1 ou 'coluna', os elementos do subconjunto são o índice da linha. A subárea restrita por subconjunto é uma área de julgamento de condições para julgar se a linha/coluna deve ser excluída.

        inplace: Se deve ser substituído no local. Valor booleano, o padrão é False. Se True, opere no DataFrame original e retorne None.

dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# 删除包含缺失值的行
data.dropna()
# 删除全部为缺失值的行
data.dropna(how='all')
# 删除至少有2个缺失值的行
data.dropna(thresh=2)
# 根据指定的列删除包含缺失的行
data.dropna(subset=['列名'])

2.5 Excluir linhas por condição

2.5.1 Exclusão aleatória elegível

        Exclua as linhas cujo tipo de feedback seja BUG e exclua aleatoriamente 44 linhas.

from random import sample
drop_index_1 =  data[(data.反馈类型 == 'BUG问题')].index.tolist()
drop_index_2 = sample(drop_index_1, k = 44)
data =  data.drop(index = drop_index_2)
#重新设置索引
data.reset_index(drop=True, inplace=True)

2.5.2 Exclua todos os itens que atendam às condições

data =  data.drop(index = data[(data.反馈类型 == '其他')].index.tolist())

3. Redefina o índice

data.reset_index(drop=True, inplace=True)

4. Veja o número de categorias

for index,key_values in enumerate(data.联合分类.value_counts().items()):
    print(index,key_values)

data['标注类型'].value_counts()

 5. atravessar dados

        Obtenha os dados da linha especificada por meio de data.iloc[index].

content_list = []
label_list = []
for index in range(len(data)):
    content = data.iloc[index]['内容']
    label = data.iloc[index]['标注类型']
    content_list.append(content)
    label_list.append(label)

6. Novos dados

new_data = pd.DataFrame()
new_data['content'] = content_list
new_data['label'] = label_list

7. Estatísticas e rótulos definidos

Feedback_type = {}
for index,item in enumerate(list(new_data['label'].value_counts().keys())):
    Feedback_type[item]  = index
def add_Feedback_type_index(Feed_type):
    index = Feedback_type.get(Feed_type)
    return index
new_data['feedback_type_label'] = new_data['label'].apply(add_Feedback_type_index)

8. Salve o arquivo de mapeamento 

with open("Feedback_type.json", "w") as outfile:
    json.dump(Feedback_type, outfile,ensure_ascii=False)

9. Excel de geração de dados estatísticos

def Statistics(data):
    keys = []
    values = []
    for key_values in (data):
        keys.append(key_values[0])
        values.append(key_values[1])
    pkg_name_index_xlsx=pd.DataFrame()
    pkg_name_index_xlsx['类目'] = keys
    pkg_name_index_xlsx['数量'] = values
    pkg_name_index_xlsx.to_excel(excel_writer= r"联合分类.xlsx")
Statistics(data.联合分类.value_counts().items())

10. Armazene dados

#将合并的data存储
data.to_csv('./Total_data.csv',index = False,encoding='utf8')

11. Amostragem negativa de dados

#统计联合分类中数量大于4000的类目
drop_element_list = []
for index,key_values in enumerate(data.联合分类.value_counts().items()):
    if key_values[1] > 4000:
        drop_element_list.append(key_values[0])

#对其删除1200条
from random import sample
def drop_element(data,drop_element_list):
    for index in range(len(drop_element_list)):
        element = drop_element_list[index]
        result = 1200
        drop_index_1 =  data[(data.联合分类 == element)].index.tolist()
        drop_index_2 = sample(drop_index_1, k=result)
        data =  data.drop(index = drop_index_2)
        data.reset_index(drop=True, inplace=True)
    return data
data = drop_element(data,drop_element_list)

Acho que você gosta

Origin blog.csdn.net/weixin_44750512/article/details/132335340
Recomendado
Clasificación