2 votes

Déposer des colonnes avec des chaînes spécifiques dans une ligne spécifique en utilisant Python

En ce moment, j'ai un énorme ensemble de données de recensement que j'essaie de nettoyer via Pandas. Dans l'état actuel des choses, j'ai un tas de colonnes mesurant la "Signification statistique" qui contiennent soit une valeur nulle, soit un '*'. La phrase "Statistical Significance" ne se trouve pas dans le nom de la colonne, mais dans la première ligne de la colonne en tant que ligne de description. Il y en a plus de 2000, et je veux juste les supprimer tous en utilisant Python (je ferai la plupart des analyses de données réelles en R). Après quelques ajustements, j'ai réussi à créer un nouveau fichier CSV :

import pandas as pd
df = pd.read_csv('~/Desktop/ht1.csv')
def drop(data):
    df2 = []
    for x in data:
        if  "Significance" in data.loc[0,x]:
            data.drop(x, axis = 1, inplace=True)
            return data
ndf = drop(df)
ndf.to_csv('~/Desktop/ht2.csv')

Cependant, il y a un problème avec les colonnes qui tombent réellement (c'est-à-dire qu'elles ne tombent pas... du tout). Je suis à bout de nerfs en essayant d'utiliser mes connaissances relativement limitées en matière de codage et des articles Internet frustrants et obtus pour résoudre ce problème.

Toute aide serait grandement appréciée.

0voto

Stef Points 712

Il y a deux failles dans votre code :

  1. Votre return s'effectue dans le if donc vous retournez ce données après avoir supprimé la première colonne, les autres colonnes avec Signification " sont laissées dans le cadre de données.
  2. La suppression des colonnes pendant que vous itérez sur les données conduit à la création de confusion.

Ça marche :

def drop(data):
    cols = []
    for x in data:
        if  "Significance" in data.loc[0,x]:
            cols.append(x)
    data.drop(cols, axis = 1, inplace=True)
    return data

A plus court et plus élégant moyen d'obtenir ce que vous voulez est

newdf = df.loc[:,~df.iloc[0].str.contains('Significance')]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X