附加到DataFrame会转换dtypes

Yar*_*riv 3 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
Run Code Online (Sandbox Code Playgroud)

输出:

a    float64
b     object
dtype: object
a    float64
b     object
dtype: object
a    object         <- ???
b    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

而我本来期望一个float64替代那个object。如何避免这种转换?

我正在使用熊猫0.11。

HYR*_*YRY 6

尝试此操作,首先将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
Run Code Online (Sandbox Code Playgroud)

或者,字典列表:

df = df.append([{'a':3.0, 'b':'x'}], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

如果是字典,它将首先转换为系列,一个系列包含3.0,并且必须带有对象dtype的“ x”。

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