1
votes

comment manipuler les données du texte au CSV

J'ai un fichier texte data.txt comme celui-ci:

Gender name
bayu male
jonson male
Anna  Female

J'ai essayé de convertir ce fichier en utilisant pandas python

import pandas as pd
df = pd.read_fwf('data.txt')
df.to_csv('data.csv')

Je veux obtenir des résultats data.csv comme ceci:

Name male  female
bayu 1 0
jonson 1 0
anna 0 1

que dois-je faire?


1 commentaires

veuillez accepter la réponse qui vous convient le mieux de cette façon, elle est éliminée de la file d'attente sans réponse et aide les autres qui recherchent la même solution.


3 Réponses :


1
votes
    Name    Gender
0   bayu    male
1   jonson  male
2   anna    female

1 commentaires

Bon avec np.where +1



1
votes

Vous pouvez utiliser idxmax () avant d'enregistrer dans csv:

df['Gender'] = df[['male', 'female']].idxmax(axis=1)
df = df.drop(columns=['male', 'female'])


0 commentaires

1
votes

Peut simplement être fait avec remplacer et renommer.

DataFrame:

>>> df.assign(Gender=df.female.replace(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female

Résultat:

>>> df.assign(Gender=df.female.map(newVal)).drop(columns={'male', 'female'})
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female

enregistrement de dataframe au format csv ..

>>> df.assign(Gender=df.female.map(newVal)).drop({'male', 'female'},axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female

Votre CSV ressemblera à celui ci-dessous avec des virgules délimitées ..

>>> newVal = {0:'Male', 1: 'Female'}   # dictionary paired with key, values

Ou, Juste avec idxmax et df.assign pour réattribuer les valeurs aux nouvelles colonnes.

 def setval(col):
   col = str(col)
   if col.startswith('0'):
     return  'Male'
   if col.startswith('1'):
     return  'Female'


>>> df.assign(Gender = df[ 'female'].apply(setval)).drop({"female", "male"}, axis=1)
    Name  Gender
0   bayu    Male
1  jason    Male
2   anna  Female

2) Une autre façon autour de la création d'une fonction puis de l'utilisation de la méthode apply .

>>> df.assign(Gender = df[['male','female']].idxmax(axis=1)).drop(columns={'male', 'female'})
    Name  Gender
0   bayu    male
1  jason    male
2   anna  female

3) Juste pour la postérité ..

Vous peut créer un dict, puis mapper le dict avec l'une des colonnes, attribuer les nouvelles valeurs à une nouvelle colonne avec df.assign en supprimant davantage les colonnes indésirables.

Ici, vous pouvez utiliser la méthode map ou replace à votre aise ..

$ cat data.csv
Name,Gender
bayu,male
jason,male
anna,Female

a) dans l'exemple ci-dessous axis = 1 représente la colonne qui est la méthode la plus récente.

>>> df = df.replace({ 0: "male", 1: "Female"}).drop(columns {'male'}).rename(columns={'female': 'Gender'})
>>> df.to_csv('data.csv', index=False)

b) alors que dans l'exemple ci-dessous, nous la mentionnons explicitement à appliquer sur t la colonne qui est l'ancienne méthode.

>>> df.replace({ 0: "male", 1: "Female"}).drop(columns={'male'}).rename(columns={'female': 'Gender'})
    Name  Gender
0   bayu    male
1  jason    male
2   anna  Female

Avec .replace

>>> df
    Name  female  male
0   bayu       0     1
1  jason       0     1
2   anna       1     0


1 commentaires

Merci @Joe pour son appréciation.