我遇到的问题是向DataFrame添加一行会更改列的类型:
>>> 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
但这也不起作用。有没有使用返回新对象的函数的解决方案?
答案 0 :(得分:7)
扩展分为两个阶段,nan
首先放在该列中,然后分配给它,这就是强制它的原因。我会把它放在bug /增强列表上。它有点不平凡。
这是一种解决方法,使用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
自动执行此操作的错误/增强问题:https://github.com/pydata/pandas/issues/6485