我遇到的问题是,向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
但这也行不通。有没有不使用返回新对象的函数的解决方案?
2条答案
按热度按时间gk7wooem1#
放大分两个阶段完成,首先将
nan
放置在该列中,然后对其进行赋值,因此这就是强制执行的原因。我会把它放在bug/增强列表中。它有点不平凡。这里有一个解决方法,使用append。
bug/增强自动执行此操作的问题:https://github.com/pydata/pandas/issues/6485
wlp8pajw2#
由于
concat
现在是首选,这里有另一个解决方案:append()
在pandas 1.4.0中被弃用:未来警告:append方法已被弃用,并将在未来版本中从pandas中删除。使用pandas.concat代替。