Mon fichier de données ressemble à ceci:
df = pd.read_csv('data.txt') df user activity timestamp x-axis y-axis z-axis 0 33 Jogging 49105962326000 -0.694638 12.680544 0.50395286; 1 33 Jogging 49106062271000 5.012288 11.264028 0.95342433; 2 33 Jogging 49106112167000 4.903325 10.882658 -0.08172209; 3 33 Jogging 49106222305000 -0.612916 18.496431 3.0237172;
Comme on peut le voir, la dernière colonne se termine par un point-virgule, donc lorsque je lis dans pandas, la colonne est déduite comme objet de type (se terminant par le point-virgule.
data.txt user,activity,timestamp,x-axis,y-axis,z-axis 0,33,Jogging,49105962326000,-0.6946376999999999,12.680544,0.50395286; 1,33,Jogging,49106062271000,5.012288,11.264028,0.95342433; 2,33,Jogging,49106112167000,4.903325,10.882658000000001,-0.08172209; 3,33,Jogging,49106222305000,-0.61291564,18.496431,3.0237172;
Comment faire pour que les pandas ignorent ce point-virgule?
3 Réponses :
Vous pouvez utiliser les converters
param:
;
df = pd.read_csv('data.txt', sep=",", converters={"z-axis": lambda x: float(x.replace(";",""))}) print(df) data txtuser activity timestamp x-axis y-axis z-axis 0 0 33 Jogging 49105962326000 -0.694638 12.680544 0.503953 1 1 33 Jogging 49106062271000 5.012288 11.264028 0.953424 2 2 33 Jogging 49106112167000 4.903325 10.882658 -0.081722 3 3 33 Jogging 49106222305000 -0.612916 18.496431 3.023717
Le problème avec votre txt est qu'il a un contenu mixte. Comme je peux le voir, l'en-tête n'a pas le point-virgule comme caractère de terminaison
Si vous modifiez la première ligne en ajoutant le point-virgule, c'est assez simple
pd.read_csv("data.txt", lineterminator=";")
Ce n'est peut-être pas le cas, mais cela fonctionne étant donné l'exemple.
Dans la documentation, vous pouvez trouver un paramètre de comment
qui:
indique que le reste de la ligne ne doit pas être analysé. Si elle se trouve au début d'une ligne, la ligne sera complètement ignorée. Ce paramètre doit être un seul caractère. Comme les lignes vides (tant que skip_blank_lines = True), les lignes entièrement commentées sont ignorées par l'en-tête du paramètre mais pas par skiprows. Par exemple, si comment = '#', l'analyse de #empty \ na, b, c \ n1,2,3 avec header = 0 entraînera le traitement de â € ˜˜a, b, câ € ™ comme en-tête.
Alors si ;
n'a pu être trouvé qu'à la fin de votre dernière colonne:
>>> df = pd.read_csv("data.txt", comment=";") >>> df.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 4 entries, 0 to 3 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 user 4 non-null int64 1 activity 4 non-null object 2 timestamp 4 non-null int64 3 x-axis 4 non-null float64 4 y-axis 4 non-null float64 5 z-axis 4 non-null float64 dtypes: float64(3), int64(2), object(1) memory usage: 224.0+ bytes >>> df user activity timestamp x-axis y-axis z-axis 0 33 Jogging 49105962326000 -0.694638 12.680544 0.503953 1 33 Jogging 49106062271000 5.012288 11.264028 0.953424 2 33 Jogging 49106112167000 4.903325 10.882658 -0.081722 3 33 Jogging 49106222305000 -0.612916 18.496431 3.023717