pandasのデータフレームをエクセルファイルに保存して読み出す場合でも、数字や文字列以外が入っていると元に復元するのは難しいです。
python
1>>> import pandas as pd
2>>> df1 = pd.DataFrame({'a': [[1,2,3],[4,5,6]], 'b':[10,20]})
3>>> print(df1)
4 a b
50 [1, 2, 3] 10
61 [4, 5, 6] 20
7>>> print(df1['a'][0])
8[1, 2, 3]
9>>> print(type(df1['a'][0]))
10<class 'list'>
11>>> df1.to_excel('test.xlsx')
12>>> df2 = pd.read_excel('test.xlsx')
13>>> print(df2)
14 Unnamed: 0 a b
150 0 [1, 2, 3] 10
161 1 [4, 5, 6] 20
17>>> print(df2['a'][0])
18[1, 2, 3]
19>>> print(type(df2['a'][0]))
20<class 'str'>
というように、リストだったdf2['a'][0]が文字列に変わってしまいます。
一方、pickleを使うと、
python
1>>> import pandas as pd
2>>> import pickle
3>>> df1 = pd.DataFrame({'a': [[1,2,3],[4,5,6]], 'b':[10,20]})
4>>> print(df1)
5 a b
60 [1, 2, 3] 10
71 [4, 5, 6] 20
8>>> print(df1['a'][0])
9[1, 2, 3]
10>>> print(type(df1['a'][0]))
11<class 'list'>
12>>> with open('test.pickle', 'wb') as f:
13... pickle.dump(df1, f)
14...
15>>> with open('test.pickle', 'rb') as f:
16... df2 = pickle.load(f)
17...
18>>> print(df2)
19 a b
200 [1, 2, 3] 10
211 [4, 5, 6] 20
22>>> print(df2['a'][0])
23[1, 2, 3]
24>>> print(type(df2['a'][0]))
25<class 'list'>
で元通りになりました。(当然ですね)