import pytest
|
|
from pandas import (
|
DataFrame,
|
DatetimeIndex,
|
Series,
|
_testing as tm,
|
date_range,
|
errors,
|
read_hdf,
|
)
|
from pandas.tests.io.pytables.common import (
|
_maybe_remove,
|
ensure_clean_store,
|
)
|
|
pytestmark = pytest.mark.single_cpu
|
|
|
def test_retain_index_attributes(setup_path, unit):
|
# GH 3499, losing frequency info on index recreation
|
dti = date_range("2000-1-1", periods=3, freq="h", unit=unit)
|
df = DataFrame({"A": Series(range(3), index=dti)})
|
|
with ensure_clean_store(setup_path) as store:
|
_maybe_remove(store, "data")
|
store.put("data", df, format="table")
|
|
result = store.get("data")
|
tm.assert_frame_equal(df, result)
|
|
for attr in ["freq", "tz", "name"]:
|
for idx in ["index", "columns"]:
|
assert getattr(getattr(df, idx), attr, None) == getattr(
|
getattr(result, idx), attr, None
|
)
|
|
dti2 = date_range("2002-1-1", periods=3, freq="D", unit=unit)
|
# try to append a table with a different frequency
|
with tm.assert_produces_warning(errors.AttributeConflictWarning):
|
df2 = DataFrame({"A": Series(range(3), index=dti2)})
|
store.append("data", df2)
|
|
assert store.get_storer("data").info["index"]["freq"] is None
|
|
# this is ok
|
_maybe_remove(store, "df2")
|
dti3 = DatetimeIndex(
|
["2001-01-01", "2001-01-02", "2002-01-01"], dtype=f"M8[{unit}]"
|
)
|
df2 = DataFrame(
|
{
|
"A": Series(
|
range(3),
|
index=dti3,
|
)
|
}
|
)
|
store.append("df2", df2)
|
dti4 = date_range("2002-1-1", periods=3, freq="D", unit=unit)
|
df3 = DataFrame({"A": Series(range(3), index=dti4)})
|
store.append("df2", df3)
|
|
|
def test_retain_index_attributes2(tmp_path, setup_path):
|
path = tmp_path / setup_path
|
|
with tm.assert_produces_warning(errors.AttributeConflictWarning):
|
df = DataFrame(
|
{"A": Series(range(3), index=date_range("2000-1-1", periods=3, freq="h"))}
|
)
|
df.to_hdf(path, key="data", mode="w", append=True)
|
df2 = DataFrame(
|
{"A": Series(range(3), index=date_range("2002-1-1", periods=3, freq="D"))}
|
)
|
|
df2.to_hdf(path, key="data", append=True)
|
|
idx = date_range("2000-1-1", periods=3, freq="h")
|
idx.name = "foo"
|
df = DataFrame({"A": Series(range(3), index=idx)})
|
df.to_hdf(path, key="data", mode="w", append=True)
|
|
assert read_hdf(path, key="data").index.name == "foo"
|
|
with tm.assert_produces_warning(errors.AttributeConflictWarning):
|
idx2 = date_range("2001-1-1", periods=3, freq="h")
|
idx2.name = "bar"
|
df2 = DataFrame({"A": Series(range(3), index=idx2)})
|
df2.to_hdf(path, key="data", append=True)
|
|
assert read_hdf(path, "data").index.name is None
|