環境
- Python 3.13.1
- pandas 2.3.2
ハマったこと
columnが存在する空のDataFrameを生成したいです。
columns
引数に列名を指定すると、dtypeはobjectでした。この挙動は期待通りです。
In [8]: df_a = pandas.DataFrame(columns=["x"])
In [9]: df_a.dtypes
Out[9]:
x object
dtype: object
しかし、data
引数にkeyが列名でvalueが空リストのdictを渡すと、dtypeはfloat64でした。
In [14]: df_b = pandas.DataFrame(data={"x":[]})
In [15]: df_b.dtypes
Out[15]:
x float64
dtype: object
data
引数に加えてcolumns
引数に列名を指定しても、結果は変わりませんでした。
In [16]: df_b2 = pandas.DataFrame(data={"x":[]}, columns=["x"])
In [17]: df_b2.dtypes
Out[17]:
x float64
dtype: object
df_a
とdf_b
をx
列を軸にしてmergeする処理で、df_b2
が0件のときだけ以下のValueError
が発生しました。このことがきっかけで、上記の挙動に気づきました。
In [58]: df_a.merge(df_b,on="x")
...
ValueError: You are trying to merge on object and float64 columns for key 'x'. If you wish to proceed you should use pd.concat
関連issue
issueには上がっていますが、まだ解決されていません。
https://github.com/pandas-dev/pandas/issues/56679
似た挙動
In [62]: pandas.array([])
Out[62]:
<FloatingArray>
[]
Length: 0, dtype: Float64
https://github.com/pandas-dev/pandas/issues/56679#issuecomment-2094789661 を参考にしました。