0
votes

Conservez quelques na et déposez le reste de NA pendant la pile en python

J'ai un fichier de données similaire ci-dessous xxx

< img src = "https://i.stack.imgur.com/ulbji.png" alt = "Entrez la description de l'image ici">

comme indiqué dans ma capture d'écran ci-dessus, ma source de données sourde ( df2 ) contient peu de na / p>

quand je fais df2.stack () , je perds tous les NA des données. < p> Cependant, je voudrais conserver NA pour h7_date et H8 car ils ont leur paire de valeur / date correspondante. Pour h7_date , j'ai une valeur valide h7 et pour h8 , j'ai obtenu son correspondant h8_date .

Je voudrais déposer des enregistrements uniquement lorsque les deux valeurs ( h5_date , h5 ) sont na.

Veuillez noter que j'ai Seuls quelques colonnes ici et mes données réelles ont plus de 150 colonnes et les noms de colonne ne sont pas connus à l'avance.

Je pense que ma sortie soit comme indiqué ci-dessous qui n'a pas H5_date , h5 bien qu'ils soient na / forts>

 Entrez la description de l'image ici


3 commentaires

df2.stack (Drowna = False) ?


Désolé, cela ne fonctionne pas. Je veux dire qu'il conserve toujours Na pour H5Date, H5 aussi et ils sont affichés. Je veux laisser tomber ces archives


Les réponses avec Fontair Travaux d'approche, mais pour la réponse de @jon Clements, je suis peu claire sur .All et . Nan approche. Donc, je marque @Tawab_shakeEl réponse en solution. Il suffit d'être clair que c'est en raison de ma maîtrise limitée avec Python, je ne pouvais pas comprendre la différence entre la différence entre .Trans et. Néanmoins, les deux réponses donnent la production attendue


3 Réponses :


1
votes

Vous pouvez utiliser:

col = [x pour x dans df.columns si "date" dans x] Pour la colonne en col: df.dropna (sous-ensemble = [colonne, colonne [: - 4]], comment = 'tout', surplacée = true)

sous-ensemble Sélectionnez les lignes dans lesquelles le Na est détecté, comment spécifie les conditions de la ligne (ici toutes les 2 lignes doivent être Na) et surplace modifie le Dataframe actuel


21 commentaires

Dans ce cas, vous avez donné des noms de colonnes. Mais je ne connais peut-être pas les noms de colonne. Comment tomber dans ce cas? Il y a plus de 150 colonnes et les données ne sont pas disponibles. Donc je ne connais pas vraiment les noms de colonne


Connaissez-vous leur index?


Non je n'ai pas. L'échantillon DF en question comporte 8 à 15 colonnes, mais en temps réel, ils pourraient avoir plus de 150 colonnes. C'est comme des données de la série chronologique. Chaque jour a une mesure. Certaines dates peuvent ne pas avoir de mesure et certaines mesures peuvent ne pas avoir la date correspondante.


@Avles Faites les colonnes à la suite d'une convention de dénomination, par exemple: y a-t-il toujours H? et h? _Date paires?


@Alves Comment choisissez-vous la colonne que vous souhaitez déposer le NA à partir de là?


@Jon Clements hmmm oui et non je dirais. Actuellement son de ce format qui est h? et h? _Date (c'est pour la mesure de la fréquence cardiaque). Mais lorsque les données sont pour la mesure du cholestrol (LCHOL? et L? chol_date). Ce que j'essaie de dire, c'est que nous pouvons trouver les mots-clés date / date dans la colonne et le numéro de jour comme 1,2,3,4 (H1, H2, H3, H4), mais les alphasbets pourraient changer de h à lchol ou bp, etc.


@MAYEULSGC - Lorsque les deux colonnes sont Na, je veux dire dans ce cas H5Date et H5 sont les deux na's, afin que nous puissions les laisser tomber. Tandis que h7 n'est pas na, donc nous retenons h7date . Similaire pour h8 et h8date


Très bien, alors vous voulez laisser tomber toutes les rangées pour lesquelles il y a un couple (hx; hxdate) entièrement na?


Oui. Mais veuillez noter que le nom de la colonne présenté ici est un échantillon. Comme indiqué dans le commentaire ci-dessus, il peut avoir n'importe quel nom de colonne, mais il contient non le mot clé date et le numéro de jour comme 1 , 2 etc. peut être comme H1Date, H1 ou L1Choldate, L1CHOL ou BP1Date, BP ou UACR1Date, UACR1


J'ai édité ma solution, mais je ne pense pas que ce sera le plus efficace


Laissez-nous Continuez cette discussion en chat .


Désolé ne peut pas l'utiliser, pare-feu de la société


Quelle est la colonne [-4]? Parce que la solution ne peut fonctionner que ce Dataframe. Je veux dire ici H5Date est 4 la colonne. Donc je suppose que vous avez utilisé cela


Sortez la «date» hors du nom de la colonne, en supposant que la date est dans la dernière position. Si ce n'est pas je ne vous laisse pas modifier la chaîne pour prendre la "date". Date "et obtenir le nom de la deuxième colonne


Ne devrait-il pas être : 2 . Votre code entraîne une erreur, mais lorsque j'utilise ci-dessous, il renvoie un fichier de données vide pour la colonne dans Col: Imprimer (colonne) Imprimer (Colonne [: 2]) DF2.Dropna (sous-ensemble = [Colonne, colonne [: 2]], comment = 'Tout', surplacez = vrai)


Avez-vous appliqué cela à la Dataframe que j'ai partagée ci-dessus? Il se traduit par un fichier de données vide. Je ne sais pas si j'ai raté quelque chose. Dans tous les cas, je suppose que cela devrait être [: - 5]


Je me suis basé sur l'exemple que vous avez donné dans le commentaire à l'aide de H5Date, pas de H5_Date, s'il y a des traits de soulignement, alors oui, sortez-le avec [: -5]


Je suppose qu'il y a eu une certaine confusion avec la façon dont j'ai aménagé des choses. Juste pour être clair, je ne souhaite pas laisser tomber l'enregistrement complet. Je souhaite seulement laisser tomber ces deux colonnes. F2.Dropna (sous-ensemble = ['H5_Date', 'H5'], comment = 'All'], surplacée = vrai), cette approche peut ne pas fonctionner


Malentendu En effet, donc si sur aucune ligne, vous avez un couple (x, x_date) qui ont les deux valeurs na, vous laissez tomber le couple de colonnes pour tout le Dataframe, ai-je raison?


Je veux dire pas pour l'ensemble de la Dataframe mais pour cette personne_id


Si cela fonctionne pour vous oui, c'est probablement la solution la plus élégante



1
votes

Essayez PD.Dataframe.melt xxx xxx


2 commentaires

Non ça n'aide pas. Je souhaite retenir quelques na et déposer le reste de la NA


Sûr. En attente de voir votre réponse aussi



1
votes

sur approche consiste à fondre le DF, appliquez une clé qui identifie les colonnes du même "groupe" (dans ce cas h mais vous pouvez modifier que le cas échéant), puis groupe Par personne et cette clé, filtrez ces groupes à ceux qui contiennent au moins une valeur non NA), par exemple:

à partir de: xxx

Utilisation: xxx

qui vous donne: xxx

Vous pouvez ensuite l'utiliser comme point de départ pour modifier si nécessaire.


1 commentaires

Je comprends que tout () retournera vrai lorsque l'un des éléments est vrai. J'envisage des valeurs valides (autre autre que Na) comme vrai ici. Suis-je raison de comprendre que lorsque je remplace . Nany () avec .All () dans votre code, je ne devrais voir aucun des na. Il devrait donc exclure le nombre record de 12,13,14,15. Mais je les vois. Ai-je t-il mal?