J'ai eu du mal à gérer le fichier csv avec des tabulations et des virgules, alors prenez note de la correspondance à ce moment-là. Lorsque j'ai ouvert le fichier csv avec un éditeur de texte, cela ressemblait à ceci:
txt
0.2, 1.01, 0.60, -0.68
0.4, 1.00, 0.67, -0.69
0.6, 1.01, 0.61, -0.72
Tout d'abord, lisez le fichier avec read_csv de pandas. Le nom du fichier est sample.csv et il y a des fichiers dans le même répertoire.
In
import pandas as pd
df = pd.read_csv_("sample.csv",header = None)
#Vérifiez le contenu de DataFrame
print(df)
print(df.dtypes)
ici
df = pd.read_csv_("sample.csv",sep="\t", header = None)
J'aurais dû le faire, mais parce que je ne l'ai pas fait, les données avec des onglets mixtes ont été lues afin qu'elles soient dans la première colonne.
#### **`Out`**
```ruby
0
0 0.2\t1.01\t0.60\t-0.68
1 0.4\t1.00\t0.67\t-0.69
2 0.6\t1.01\t0.61\t-0.72
0 object
dtype: object
Procédez comme suit pour séparer les colonnes avec des délimiteurs de tabulation.
In
df = df[0].apply(lambda x: pd.Series(x.split('\t')))
#Vérifiez le contenu de DataFrame
print(df)
print(df.dtypes)
Out
0 1 2 3
0 0.2 1.01 0.60 -0.68
1 0.4 1.00 0.67 -0.69
2 0.6 1.01 0.61 -0.72
0 object
1 object
2 object
3 object
dtype: object
Puisque je veux effectuer un calcul après cela, tous sont convertis en type flottant.
Obtenez le nombre de colonnes dans le DataFrame avec df.shape [1], créez une liste du nombre de colonnes avec la fonction range et activez l'instruction for.
In
for i in range(df.shape[1]):
df[i] = df[i].astype(float)
#Vérifiez le contenu de DataFrame
print(df.dtypes)
Out
0 float64
1 float64
2 float64
3 float64
dtype: object
C'est tout.
** Supplément 1 Si vous souhaitez lire les fichiers placés sous le dossier, vous pouvez procéder comme suit.
In
import pandas as pd
import os
#Vous devez remplacer le répertoire par le dossier contenant les fichiers.
os.chdir("./Nom de dossier")
#Obtenez une liste de fichiers.
file = os.listdir("./")
# file[0]Obtenez le nom du fichier avec (en supposant qu'un seul fichier existe)
df = pd.read_csv(file[0],header=None)
** Supplément 2 Il semble que l'argument astype puisse également être un type de dictionnaire. Cela semble pratique lors de la conversion vers un autre type.
In
df.astype({'a': int, 'c': str}).dtypes
** Supplément 3 Pour entrer le nom de la colonne, pour ajouter la colonne, exécutez ce qui suit.
In
from pandas import DataFrame
#Insérer le nom de la colonne
df.columns=['a','b','c','d']
#Ajouter une colonne en spécifiant le nom de la colonne
df = DataFrame(df, columns=['a','b','c','d','e'])
** 20170410 postscript
Comme vous l'avez souligné dans le commentaire, j'ai essayé la méthode consistant à utiliser "sep =" \ t "" comme argument de read_csv, mais il a été lu avec des virgules.
Out
0 1 2 3
0 0.2, 1.01, 0.60, -0.68
1 0.4, 1.00, 0.67, -0.69
2 0.6, 1.01, 0.61, -0.72
Cependant, lorsque j'ai supprimé la description de "sep =" \ t "" et effectué read_csv, il l'a lu comme un type float normalement sans traitement de fractionnement ou de type.
Je cours avec pycharm, mais si je réinitialise l'argument sep et recommence, l'outil le déterminera-t-il automatiquement? Je ne comprends pas.
In
import pandas as pd
import os ##Pour lire des fichiers
#Lisez le fichier csv sous le dossier exemple
os.chdir("./sample")
file = os.listdir("./")
df = pd.read_csv(file[0],header=None)
os.chdir("../")
#Vérifiez le contenu de DataFrame
print(df)
print(df.dtypes)
Out
0 1 2 3
0 0.2 1.01 0.60 -0.68
1 0.4 1.00 0.67 -0.69
2 0.6 1.01 0.61 -0.72
0 float64
1 float64
2 float64
3 float64
dtype: object
Jusqu'à présent, quatre types d'événements ont été confirmés et la cause est inconnue.
Lire les données de tabulation mixte à l'aide de Pycharm_Lors de la lecture avec csv
① Lorsqu'il est lu correctement avec flotteur sans rien faire
(2) Lorsqu'il est lu avec des onglets mélangés si rien n'est fait
③sep="\t"Quand est correctement lu par float quand est spécifié
④sep="\t"Si vous spécifiez, il sera lu avec des virgules
Recommended Posts