我的问题是,将一行添加到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
但这也不起作用。有没有不使用返回新对象的函数的解决方案?
放大分为两个阶段,nan首先将a放在该列中,然后将其分配,这就是为什么要强制它的原因。我将其放在错误/增强列表中。它有点不平凡。
nan
这是一种解决方法,可以使用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