You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.3 KiB
33 lines
1.3 KiB
import numpy as np
|
|
|
|
import pandas as pd
|
|
import pandas._testing as tm
|
|
from pandas.tests.extension.array_with_attr import FloatAttrArray
|
|
|
|
|
|
def test_concat_with_all_na():
|
|
# https://github.com/pandas-dev/pandas/pull/47762
|
|
# ensure that attribute of the column array is preserved (when it gets
|
|
# preserved in reindexing the array) during merge/concat
|
|
arr = FloatAttrArray(np.array([np.nan, np.nan], dtype="float64"), attr="test")
|
|
|
|
df1 = pd.DataFrame({"col": arr, "key": [0, 1]})
|
|
df2 = pd.DataFrame({"key": [0, 1], "col2": [1, 2]})
|
|
result = pd.merge(df1, df2, on="key")
|
|
expected = pd.DataFrame({"col": arr, "key": [0, 1], "col2": [1, 2]})
|
|
tm.assert_frame_equal(result, expected)
|
|
assert result["col"].array.attr == "test"
|
|
|
|
df1 = pd.DataFrame({"col": arr, "key": [0, 1]})
|
|
df2 = pd.DataFrame({"key": [0, 2], "col2": [1, 2]})
|
|
result = pd.merge(df1, df2, on="key")
|
|
expected = pd.DataFrame({"col": arr.take([0]), "key": [0], "col2": [1]})
|
|
tm.assert_frame_equal(result, expected)
|
|
assert result["col"].array.attr == "test"
|
|
|
|
result = pd.concat([df1.set_index("key"), df2.set_index("key")], axis=1)
|
|
expected = pd.DataFrame(
|
|
{"col": arr.take([0, 1, -1]), "col2": [1, np.nan, 2], "key": [0, 1, 2]}
|
|
).set_index("key")
|
|
tm.assert_frame_equal(result, expected)
|
|
assert result["col"].array.attr == "test"
|
|
|