次のような、列名と dtype が同じ 2 つのデータフレームがあります。
A object
B category
C category
各データフレームのカテゴリは同一ではありません。
通常の連結の場合、pandas は次のように出力します。
A object
B object
C object
これは期待される動作ですドキュメント。
ただし、分類を維持し、カテゴリを結合したいので、データフレーム内のカテゴリである列全体で union_categoricals を試しました。cdf
と はdf
私の 2 つのデータフレームです。
for column in df:
if df[column].dtype.name == "category" and cdf[column].dtype.name == "category":
print (column)
union_categoricals([cdf[column], df[column]], ignore_order=True)
cdf = pd.concat([cdf,df])
これでもまだカテゴリ出力は得られません。
ベストアンサー1
ドキュメントからは完全には明らかではないと思いますが、次のようなことができます。サンプルデータを以下に示します。
df1=pd.DataFrame({'x':pd.Categorical(['dog','cat'])})
df2=pd.DataFrame({'x':pd.Categorical(['cat','rat'])})
union_categoricals
データフレーム間で一貫したカテゴリを取得するために使用します。df.x.cat.codes
これが機能することを確信する必要がある場合は試してください。
from pandas.api.types import union_categoricals
uc = union_categoricals([df1.x,df2.x])
df1.x = pd.Categorical( df1.x, categories=uc.categories )
df2.x = pd.Categorical( df2.x, categories=uc.categories )
連結して、dtype がカテゴリであることを確認します。
df3 = pd.concat([df1,df2])
df3.x.dtypes
category
@C8H10N4O2 が示唆しているように、連結後にオブジェクトからカテゴリに強制的に戻すこともできます。正直なところ、データセットが小さい場合は、それが最も簡単な方法だと思います。ただし、データフレームが大きい場合は、 を使用するとunion_categoricals
メモリ効率がはるかに高くなります。