2017-02-09 76 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) 

希望这会有所帮助。