2014-01-22 4 views
1

Я добавляющим к pandas.DataFrame и DTYPE колонны преобразуется неожиданным образом:прилагая к DataFrame преобразует 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':' for x in df ['a']: print (type (x)) 'output:' для каждого элемента – EdChum

ответ

2

Попробуйте это, преобразовать объект 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) 

Если это ДИКТ, она будет конвертировать в серии первых, серия содержит 3.0, а «x» - с объектом dtype.

Если это список dict, он будет преобразован в DataFrame, DataFrame может иметь разные dtype для каждого столбца.

+0

Это сообщает 'dtypes' как' float64', как ожидалось, любую идею, почему 'append' с dict не работает так, как ожидалось? – EdChum

+0

Это исправлено в master/0.13.1 (при создании фрейма для добавления он не преобразовывал типы объектов dtypes, что и запускает dict). см. здесь: https: //github.com/pydata/pandas/pull/5995/files#diff-1e79abbbdd150d4771b91ea60a4e1cc7R3628 – Jeff

Смежные вопросы