熊猫如何用'对象'dtype来对待系列

时间:2014-03-04 11:55:54

标签: python pandas

我使用pandas版本'0.12.0'。我有一个数据框如下。 id系列的dtype最初是浮点数,但我被告知它也可以包含字符串,所以我的代码需要满足这种可能性。所以id的当前dtype是对象。

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610],
                    'colour': ['black', 'white','white','white',
                            'black', 'black', 'white', 'white'],
                    'shape': ['round', 'triangular', 'triangular','triangular','square',
                                        'triangular','round','triangular']
                    },  columns= ['id','colour', 'shape'])

df.dtypes
 ->id        object
 ->colour    object
 ->shape     object
 ->dtype: object

但是,使用id的内容检查id中的值或使'等于'条件不起作用:

'zhub1' in df.id
 ->False 
123 in df.id
 ->False 
df.ix[df.id=='zhub1']
 ->Empty DataFrame
 ->Columns: [id, colour, shape]
 ->Index: []

我还尝试将id的dtype转换为str,但它没有帮助:

df.id = df.id.astype(str)

我不知道在这一点上我应该如何对待id,因为我不明白object dtype在这种情况下的行为。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

这样做:

In [41]:

df[df.id.isin(['zhub1'])]
Out[41]:
      id colour       shape
2  zhub1  white  triangular

[1 rows x 3 columns]

或更好:

In [42]:

df[df.id == 'zhub1']
Out[42]:
      id colour       shape
2  zhub1  white  triangular

[1 rows x 3 columns]

整数比较也有效:

In [43]:

df[df.id == 123]
Out[43]:
    id colour  shape
0  123  black  round

[1 rows x 3 columns]