[PYTHON] Depuis pandas1.0.0, vous pouvez spécifier l'URL S3 / GCS avec read_pickle () et to_pickle ()!

pandas 1.0.0 a été publié.

https://pandas.pydata.org/pandas-docs/stable/whatsnew/v1.0.0.html

En tant que nouvelle fonctionnalité

--Pandas.NA, qui gère différents types de valeurs manquantes de manière unifiée, a été introduit à titre d'essai.

Cependant, personnellement, la note de publication ci-dessus 'Autres améliorations' -enhancements) J'ai remarqué la description écrite à la toute fin:

DataFrame.to_pickle() and read_pickle() now accept URL (GH30163)

Cela signifie que vous pouvez directement enregistrer et lire les données qui ont été solidifiées par pickle sur le stockage en nuage! ??

Je l'ai essayé pour une raison:

Manifestation

Créez un DataFrame approprié comme celui ci-dessous.

df = pd.DataFrame({'hoge': [1, 2, 3], 'fuga': [4, 5, 6], 'piyo': [7, 8, 9]})

En faisant cela,

hoge fuga piyo
0 1 4 7
1 2 5 8
2 3 6 9

J'ai pu exprimer cela. [^ 1]

[^ 1]: Au fait, cette table a été sortie en utilisant df.to_markdown () qui a également été ajoutée à partir de pandas 1.0.0. Pratique.

Enregistrez-le dans le compartiment AWS S3 `` s3: // tatamiya-test / `créé à l'avance et lisez-le. [^ 2] [^ 3]

[^ 2]: j'omettrai la méthode de paramétrage d'IAM et de clé critique. [^ 3]: Je ne l'ai pas confirmé, mais vous devriez pouvoir utiliser GCS.

Pour les pandas 0.25.3

Tant qu'il est sauvegardé / lu au format .csv, c'était possible avec la version conventionnelle.

pd.__version__
# >> '0.25.3'

df.to_csv('s3://tatamiya-test/test.csv', index=None)

pd.read_csv('s3://tatamiya-test/test.csv')
# >> hoge	fuga	piyo
# >> 0	1	4	7
# >> 1	2	5	8
# >> 2	3	6	9

Cependant, dans le cas du pickle, le PATH n'a pas été reconnu par la même opération.

pd.__version__
# >> '0.25.3'

df.to_pickle('s3://tatamiya-test/test.pkl')
# >> FileNotFoundError: [Errno 2] No such file or directory: 's3://tatamiya-test/test.pkl'

pd.read_pickle('s3://tatamiya-test/test.pkl')
# >> FileNotFoundError: [Errno 2] No such file or directory: 's3://tatamiya-test/test.pkl'

Pour les pandas 1.0.0

Maintenant, essayons avec la dernière version 1.0.0.

pd.__version__
# >> '1.0.0'

df.to_pickle('s3://tatamiya-test/test.pkl')

pd.read_pickle('s3://tatamiya-test/test.pkl')
# >> hoge	fuga	piyo
# >> 0	1	4	7
# >> 1	2	5	8
# >> 2	3	6	9

J'ai pu confirmer qu'il peut être sauvegardé et lu correctement!

À la fin

Lors du traitement de données à l'aide de pandas sur le cloud, même si la source de données est sur S3 ou GCS, s'il s'agit d'un fichier au format csv, il était possible de spécifier directement l'URL avec to_csv () et de la lire.

Cependant, lors de l'enregistrement des données intermédiaires après la mise en forme et le traitement, il est préférable de convertir le DataFrame ou la série en tant qu'objet Python en une chaîne d'octets et de l'enregistrer.

--Petite capacité --Rechargement rapide

To_pickle () et read_pickle () étaient utiles car ils avaient de tels avantages.

Cependant, comme mentionné ci-dessus, dans le passé, l'URL S3 / GCS ne pouvait pas être spécifiée comme destination de sauvegarde pour le moment.

--Utiliser la bibliothèque cliente --Enregistrer localement, puis sauter avec l'outil de ligne de commande

J'ai dû prendre du temps et des efforts.

C'est pourquoi cette mise à jour était sobre mais personnellement très reconnaissante!

(Cependant, comme la compatibilité descendante n'est pas garantie, il n'est pas possible d'introduire la 1.0.0 telle qu'elle est dans le code jusqu'à présent ...)

Recommended Posts

Depuis pandas1.0.0, vous pouvez spécifier l'URL S3 / GCS avec read_pickle () et to_pickle ()!
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
[AWS] Recherchez et acquérez les données nécessaires à partir des fichiers S3 avec S3 Select
Considérez ce que vous pouvez faire avec Python dans l'article Qiita
Obtenez les conditions de simulation OCTA à partir d'un fichier et enregistrez avec les pandas