我将追加到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。
尝试此操作,首先将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。