将numpy ndarray转换为非numpy数据类型

时间:2014-02-07 17:48:37

标签: numpy pandas networkx

我正在尝试将np.ndarray的元素转换为本机整数类型。

>>> x = np.array([1, 2, 2.5])
>>> type(x[0])
<type 'numpy.float64'>
>>> type(x.astype(int)[0])
<type 'numpy.int64'>

我想要的是:

>>> type(x.astype('something here')[0])
<type 'int'>

这是在pandas上下文中提出的原始问题,但事实证明归结为np.ndarray.astype()

的问题

astype(int)维护Series中整数的numpy-ness:

>>> s = pd.Series([1,2,3])
>>> type(s[0])
<type 'numpy.int64'>
>>> type(s[0].astype(int))
<type 'numpy.int64'>

反正是否有一个系列,甚至只是一个系列的一个元素作为本机数据类型,以便可以实现以下目标?

>>> type(s[0].dosomething())
<type 'int'>

为什么我要问这个?

我正在尝试使用pandas.DataFramenetworkx.write_gexf()导出为GEXF格式。

出口商坚持认为,所有使用的数据都会type(x)intfloat或其他一些数据回复bool。它不知道如何处理numpy.int64

1 个答案:

答案 0 :(得分:1)

根据评论,可能会发现您不需要这样,但要回答当前的问题,您可以使用item方法。例如:

In [78]: x = np.array([1.0, 2.0, 3.0])

In [79]: x.dtype
Out[79]: dtype('float64')

In [80]: x.item(0)
Out[80]: 1.0

In [81]: type(x.item(0))
Out[81]: float

In [82]: y = np.array([1, 2, 3], dtype=np.int32)

In [83]: type(y.item(0))
Out[83]: int

In [84]: type(y[0])
Out[84]: numpy.int32

要一次转换整个数组,tolist方法会将元素转换为最接近的兼容Python类型:

In [95]: xlist = x.tolist()

In [96]: xlist
Out[96]: [1.0, 2.0, 3.0]

In [97]: type(xlist[0])
Out[97]: float

In [98]: ylist = y.tolist()

In [99]: ylist
Out[99]: [1, 2, 3]

In [100]: type(ylist[0])
Out[100]: int