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?
3 Réponses :
Name Gender 0 bayu male 1 jonson male 2 anna female
Bon avec np.where +1
Vous pouvez utiliser idxmax () avant d'enregistrer dans csv:
df['Gender'] = df[['male', 'female']].idxmax(axis=1) df = df.drop(columns=['male', 'female'])
Peut simplement être fait avec remplacer et renommer.
>>> df.assign(Gender=df.female.replace(newVal)).drop({'male', 'female'},axis=1)
Name Gender
0 bayu Male
1 jason Male
2 anna Female
>>> 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
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
Merci @Joe pour son appréciation.
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.