小编典典

向pandas DataFrame添加行会更改dtype

python

我的问题是,将一行添加到DataFrame会更改列的dtype:

>>> from pandas import DataFrame
>>> df = DataFrame({'a' : range(10)}, dtype='i4')
>>> df
   a
0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

[10 rows x 1 columns]

我将dtype特别指定为int32(即’i4’),可以看出:

>>> df.dtypes
a    int32
dtype: object

但是,添加一行会将dtype更改为float64:

>>> df.loc[10] = 99

>>> df
     a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  99

[11 rows x 1 columns]

>>> df.dtypes
a    float64
dtype: object

我尝试指定添加的值的dtype:

>>> import numpy as np
>>> df = DataFrame({'a' : np.arange(10, dtype=np.int32)})

>>> df.dtypes
a    int32
dtype: object

>>> df.loc[10] = np.int32(0)

>>> df.dtypes
a    float64
dtype: object

但这也不起作用。有没有不使用返回新对象的函数的解决方案?


阅读 211

收藏
2020-12-20

共1个答案

小编典典

放大分为两个阶段,nan首先将a放在该列中,然后将其分配,这就是为什么要强制它的原因。我将其放在错误/增强列表中。它有点不平凡。

这是一种解决方法,可以使用append。

In [14]: df.append(Series(99,[10],dtype='i4').to_frame('a'))
Out[14]: 
     a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  99

[11 rows x 1 columns]

In [15]: df.append(Series(99,[10],dtype='i4').to_frame('a')).dtypes
Out[15]: 
a    int32
dtype: object

bug /增强功能可以自动执行此操作的问题:https :
//github.com/pydata/pandas/issues/6485

2020-12-20