まず、適当に配列やデータフレームを作ります。
sample.py
import pandas as pd
import numpy as np
txt =np.array([letter for letter in 'abcdefghijklmno']).reshape(3,5)
array = np.arange(12).reshape(3,4)
df = pd.DataFrame(array.T, index=['A','B','C','D'],columns=['a','b','c'])
print(txt) >>>
[['a' 'b' 'c' 'd' 'e']
['f' 'g' 'h' 'i' 'j']
['k' 'l' 'm' 'n' 'o']]
print(array) >>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(df) >>>
a b c
A 0 4 8
B 1 5 9
C 2 6 10
D 3 7 11
まず、numpy
のコマンドで配列やデータフレーム、リストを保存して、さらにロードします。
sample.py
np.savetxt('save1.txt', array)
np.save('save2.npy', txt)
np.savez('save3.npz', save_array=array, save_df=df)
np.save('save4.npy', [1,2,3])
loaded_array=np.loadtxt('save1.txt')
loaded_txt=np.load('save2.npy')
loaded_array_df=np.load('save3.npz')
loaded_list=np.load('save4.npy')
print(loaded_array) >>>
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
print(loaded_txt) >>>
[['a' 'b' 'c' 'd' 'e']
['f' 'g' 'h' 'i' 'j']
['k' 'l' 'm' 'n' 'o']]
print(loaded_array_df['save_array']) >>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(loaded_array_df['save_df']) >>>
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
#元はデータフレームだったのに配列になっている。
print(loaded_list) >>>
[1 2 3]
基本的にnp.save()
で保存し、np.load()
でロードできます。np.savez()
で一つのファイルに複数の配列を保存することができます。複数保存するときは名前を付けるとロードするときに便利です。ここでデータフレームは、インデックスや列名は保存されず、ロードしてみると要素だけの配列になってしまうので注意です。
データフレームをきちんと保存して取り出すには.to_csv()
で保存し、pd.read_csv()
で読みださねばなりません。しかしインデックスの列が要素に含まれてしまうときは、オプションとしてindex_col=0
としましょう。これは0列目をインデックスにすることを意味します。
sample.py
df.to_csv('save5.csv')
loaded_df = pd.read_csv('save5.csv')
loaded_df2 = pd.read_csv('save5.csv', index_col=0)
print(loaded_df) >>>
Unnamed: 0 a b c
0 A 0 4 8
1 B 1 5 9
2 C 2 6 10
3 D 3 7 11
print(loaded_df2) >>>
a b c
A 0 4 8
B 1 5 9
C 2 6 10
D 3 7 11
#追記
投稿後に頂いたコメント(@nkay さんより)の中で指摘がありましたので追記します。
以下のように、.to_pickle()
で保存し、pd.read_pickle()
でロードすると、オプションなしで元の形でデータフレームを保持できます。こちらのほうが便利ですね。ご教授いただきありがとうございました。
sample.py
>>> df.to_pickle("save.pkl")
>>>
>>> loaded_df = pd.read_pickle("save.pkl")
>>> print(loaded_df)
a b c
A 0 4 8
B 1 5 9
C 2 6 10
D 3 7 11