pandas - 读取文件之前/之后的不同dtype列

时间:2016-03-02 12:55:04

标签: python pandas

我指的是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读取文件会导致一个字符串数组,在写入/读取数据帧之前,它比原始数组数组更复杂。任何人都知道从文件中读取数据帧后是否有办法保持相同的格式?

1 个答案:

答案 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)是二进制对象格式。