Je suis en train de construire un recommender en utilisant Pandas, et j'ai besoin de charger un gros fichier csv (avec quelque chose comme 10 millions d'enregistrements). Mon fichier d'entrée ressemble à ceci:Pandas read_csv dtype sauf l'index et les colonnes
P1 P2 ... k
un 1 1 ... 0
b 0 0 ... 0
c 0 0 ... 1
Avec k près de 400 colonnes.
j'essaie de lire mon dossier avec cet appel:
pd.read_csv(url,header=0, sep="\t",index_col=0,encoding="utf-8")
Quand je lis le fichier, Pandas devine à tort que tous les chiffres dans mes données sont flotteurs. Je veux forcer les données à être dans le type int afin d'économiser beaucoup plus d'espace dans le processus de chargement. J'ai essayé d'utiliser l'option: dtype=int
mais cette erreur venu:
ValueError: invalid literal for int() with base 10: 'a'
Je suppose que cela est dû au fait que mon index et les colonnes sont des chaînes.
Je sais que je pourrais essayer d'utiliser un dictionnaire pour spécifier les types de données pour les colonnes manuellement, mais depuis que je suis la construction d'un recommender ne connaissent pas les colonnes et les index de mes fichiers à l'avance, et je veux éviter de recréer le dictionnaire chaque fois qu'un nouveau fichier est hébergé.
Alors, comment puis-je spécifier à la méthode read_csv
à définir le type entier uniquement sur les données de ma table, et non pour l'index et les noms de colonnes?
Je ne souhaite pas utiliser une fonction sur la datafrane chargée, en raison de l'utilisation de la mémoire.Je veux juste savoir s'il existe un moyen de configurer correctement la méthode read_csv pour définir le type de données correct, afin de gagner de l'espace mémoire. Dans votre solution, je chargerais l'ensemble de l'image comme float64, puis j'en créerais une copie en mémoire, ce qui n'est pas utile pour le moment. Merci quand même –
J'édite pour une autre solution que je pense être possible –