2014-01-22 40 views
1

我附加到一个pandas.DataFrame和列的D型细胞被转化以意想不到的方式:追加到一个数据帧转换dtypes

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。 我该如何避免这种转换?

我正在使用熊猫0.11。

+0

嗯..奇怪,如果我这样做我得到'float':'为df ['a'] x: print(type(x))'outputs:' for each item – EdChum

回答

2

试试这个,在字典对象首先转换为数据帧:

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 

,或者字典的列表:

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

如果它是一个字典,它会转换为一个系列的第一,一系列包含3.0和'x'必须与对象dtype。

如果它是一个字典列表,它将被转换为一个DataFrame,DataFrame可以为每一列使用不同的dtype。

+0

这将'dtypes'报告为'float64',所有想法为什么'附加'与字典不符合预期? – EdChum

+0

这是固定在主/ 0.13.1(当创建框架追加它不转换对象dtypes,这是一个字典开始作为)。请参阅此处:https://github.com/pydata/pandas/pull/5995/files#diff-1e79abbbdd150d4771b91ea60a4e1cc7R3628 – Jeff