2017-02-09 75 views
3

如何追加到大熊貓數據幀包含明確的數據類型的預定義欄:追加到大熊貓數據幀與類別列

df=pd.DataFrame([],columns=['a','b']) 
df['a']=pd.Categorical([],categories=[0,1]) 

new_df=pd.DataFrame.from_dict({'a':[1],'b':[0]}) 
df.append(new_df) 

上面扔下我一個錯誤:

ValueError: all the input arrays must have same number of dimensions 

更新: 如果類別是字符串,而不是整數,附加似乎工作:

df['a']=pd.Categorical([],categories=['Left','Right']) 

new_df=pd.DataFrame.from_dict({'a':['Left'],'b':[0]}) 
df.append(new_df) 

那麼,我該如何附加到具有int值類別的DataFrame?其次,我推測使用二進制值(0/1),將列存儲爲Categorical而不是數字數據類型將更有效或更快。這是真的?如果沒有,我甚至可能不費力地將我的列轉換爲分類類型。

+0

應該這樣工作嗎? new_df = pd.DataFrame.from_dict({'a':[1],'b':[0]}), new_df ['a'] = new_df ['a']。astype('category') – Vaishali

+0

嗯這不起作用,但安華的答案如下。它會拋出錯誤''在類別concat不兼容的類別'和問題已在這裏報告: https://github.com/pandas-dev/pandas/issues/12699 我認爲問題是在' 'new_df''沒有完全定義,因此可能與''df''中的類別不一致 – wenhoo

回答

1

您必須保持兩個數據幀一致。在將第一個數據幀的列a轉換爲分類時,您需要對第二個數據幀執行相同操作。你可以這樣做 -

import pandas as pd 

df=pd.DataFrame([],columns=['a', 'b']) 
df['a']=pd.Categorical([],[0, 1]) 

new_df=pd.DataFrame.from_dict({'a':[0,1,1,1,0,0],'b':[1,1,8,4,0,0]}) 
new_df['a'] = pd.Categorical(new_df['a'],[0, 1]) 

df.append(new_df, ignore_index=True) 

希望這會有所幫助。