我将附加到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。
答案 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。