我有一个看起来像这样的数据框:

In [169]: dfstacked
Out[169]:
    Percent Held  Rank
0          14.10   [1]
1          11.13   [2]
2          10.11   [3]
3           8.99   [4]
4           4.79   [5]
5           2.92   [6]
6           2.79   [7]
7           2.63   [8]
8           2.63   [9]
9           1.83  [10]
10          1.81  [11]
11          1.66  [12]
12          1.66  [13]
13          1.64  [14]
14          1.63  [15]
15          1.62  [16]
16          1.26  [17]
17          1.08  [18]
18          1.08  [19]
19          1.07  [20]


dfstacked["Rank"]的基础数据类型是数组。我使用正则表达式(使用str.findall())创建了它,但为了安全起见,请检查以下内容:

In [171]: dfstacked["Rank"].dtype
Out[171]: dtype('O')


但是,我想将dfstacked["Rank"]转换为具有Series数据类型的int,以便可以对dfstacked["Rank"]中的值执行一些统计测试。我将如何去做呢?

到目前为止,我已经尝试使用Series.mapSeries.astype()强制使用整数系列。两者都返回ValueErrors。

最终,我想要

    Percent Held  Rank
0          14.10   1
1          11.13   2
2          10.11   3
3           8.99   4
4           4.79   5
5           2.92   6
6           2.79   7
7           2.63   8
8           2.63   9
9           1.83   10
10          1.81   11
11          1.66   12
12          1.66   13
13          1.64   14
14          1.63   15
15          1.62   16
16          1.26   17
17          1.08   18
18          1.08   19
19          1.07   20

最佳答案

我相信以下应该起作用:

In [6]:

df = pd.DataFrame({'Rank':[np.array([0]), np.array([1]), np.array([2])]})
df
Out[6]:
  Rank
0  [0]
1  [1]
2  [2]
In [8]:

df['Rank'] = df['Rank'].apply(lambda x: x[0])
df
Out[8]:
   Rank
0     0
1     1
2     2

In [9]:

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 1 columns):
Rank    3 non-null int64
dtypes: int64(1)
memory usage: 48.0 bytes


因此,在您的情况下:dfstacked['Rank'] = dfstacked['Rank'].apply(lambda x: x[0])

关于python - Pandas Python:将数组类型转换为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29614756/

10-16 08:09