Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用分类列附加到DataFrame_Python_Pandas - Fatal编程技术网

Python 使用分类列附加到DataFrame

Python 使用分类列附加到DataFrame,python,pandas,Python,Pandas,如何附加到包含类别数据类型预定义列的Pandas数据框: 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

如何附加到包含类别数据类型预定义列的Pandas数据框:

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值的类别附加到数据帧?其次,我假设使用二进制值(0/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)

希望这能有所帮助。

这行吗?new_df=pd.DataFrame.from_dict({'a':[1],'b':[0]}),new_df['a']=new_df['a'].astype('category')嗯,这不起作用,但Anwar下面的答案起作用。它在Category concat中抛出了错误
不兼容的类别,这里已经报告了这个问题:我认为问题在于
新的_df
中的类别没有完全定义,因此可能与
df
中的类别不一致。您可能想要使用union _Category:有点类似的例子: