附加到DataFrame会转换dtypes

时间:2014-01-22 11:19:00

标签: python pandas

我将附加到pandas.DataFrame,并以意外的方式转换列的dtype:

import pandas as pd
df=pd.DataFrame({'a':1.0, 'b':'x'}, index=[0])
print df.dtypes
df = df.append({'a':3.0}, ignore_index=True)
print df.dtypes
df = df.append({'a':3.0, 'b':'x'}, ignore_index=True)
print df.dtypes

输出:

a    float64
b     object
dtype: object
a    float64
b     object
dtype: object
a    object         <- ???
b    object
dtype: object

虽然我原本期望float64而不是object。 我该如何避免转换?

我正在使用pandas 0.11。

1 个答案:

答案 0 :(得分:4)

试试这个,首先将dict对象转换为DataFrame:

import pandas as pd
df=pd.DataFrame({'a':1.0, 'b':'x'}, index=[0])
print df.dtypes
df = df.append({'a':3.0}, ignore_index=True)
print df.dtypes
df = df.append(pd.DataFrame([{'a':3.0, 'b':'x'}]), ignore_index=True)
print df.dtypes

或者,dict列表:

df = df.append([{'a':3.0, 'b':'x'}], ignore_index=True)

如果它是dict,它将首先转换为Series,系列包含3.0,而'x'必须转换为object dtype。

如果它是dict列表,它将转换为DataFrame,DataFrame可以为每列提供不同的dtype。