我指的是this问题,因为我在从.csv读取相同的数据帧之前和之后面临着一种奇怪的列类型行为。从:
开始In [137]: df
Out[137]:
node1 node2 lang w c1 c2
0 1 2 it 1 a a
1 1 2 en 1 a a
2 2 3 es 2 a b
3 3 4 it 1 b b
4 5 6 it 1 c c
5 3 5 tg 1 b c
6 1 7 it 1 a a
7 7 1 es 1 a a
8 3 8 es 1 b b
9 8 4 es 1 b b
10 1 9 it 1 a a
然后执行groupby:
In [138]: g = df.groupby(['c1','c2'])['lang'].unique().reset_index()
In [139]: g
Out[139]:
c1 c2 lang
0 a a [it, en, es]
1 a b [es]
2 b b [it, es]
3 b c [tg]
4 c c [it]
并获取lang
列的值返回:
In [148]: g['lang'].values
Out[148]:
array([array(['it', 'en', 'es'], dtype=object),
array(['es'], dtype=object), array(['it', 'es'], dtype=object),
array(['tg'], dtype=object), array(['it'], dtype=object)], dtype=object)
然后,如果我:
In [141]: g.to_csv('g.csv',index=False)
In [142]: g = pd.read_csv('g.csv')
In [143]: g
Out[143]:
c1 c2 lang
0 a a ['it' 'en' 'es']
1 a b ['es']
2 b b ['it' 'es']
3 b c ['tg']
4 c c ['it']
In [145]: g['lang'].values
Out[145]: array(["['it' 'en' 'es']", "['es']", "['it' 'es']", "['tg']", "['it']"], dtype=object)
因此,从.csv读取文件会导致一个字符串数组,在写入/读取数据帧之前,它比原始数组数组更复杂。任何人都知道从文件中读取数据帧后是否有办法保持相同的格式?
答案 0 :(得分:2)
您可能想要使用pickle IO:
import pandas as pd
df = pd.DataFrame({'a': [['a', 'b']]})
df.a.dtype
df.to_pickle('stuff.pkl.bin')
>>> pd.read_pickle('stuff.pkl.bin').a
0 [a, b]
Name: a, dtype: object
CSV是一种非常有限的文本格式。相反,pickle
(and its variants)是二进制对象格式。