118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from warnings import catch_warnings
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
from pandas._libs.tslibs import Timestamp
 | 
						|
 | 
						|
from pandas import (
 | 
						|
    DataFrame,
 | 
						|
    Series,
 | 
						|
    _testing as tm,
 | 
						|
    date_range,
 | 
						|
    read_hdf,
 | 
						|
)
 | 
						|
from pandas.tests.io.pytables.common import (
 | 
						|
    _maybe_remove,
 | 
						|
    ensure_clean_path,
 | 
						|
    ensure_clean_store,
 | 
						|
)
 | 
						|
 | 
						|
pytestmark = pytest.mark.single_cpu
 | 
						|
 | 
						|
 | 
						|
def test_retain_index_attributes(setup_path):
 | 
						|
 | 
						|
    # GH 3499, losing frequency info on index recreation
 | 
						|
    df = DataFrame(
 | 
						|
        {"A": Series(range(3), index=date_range("2000-1-1", periods=3, freq="H"))}
 | 
						|
    )
 | 
						|
 | 
						|
    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
 | 
						|
                )
 | 
						|
 | 
						|
        # try to append a table with a different frequency
 | 
						|
        with catch_warnings(record=True):
 | 
						|
            df2 = DataFrame(
 | 
						|
                {
 | 
						|
                    "A": Series(
 | 
						|
                        range(3), index=date_range("2002-1-1", periods=3, freq="D")
 | 
						|
                    )
 | 
						|
                }
 | 
						|
            )
 | 
						|
            store.append("data", df2)
 | 
						|
 | 
						|
        assert store.get_storer("data").info["index"]["freq"] is None
 | 
						|
 | 
						|
        # this is ok
 | 
						|
        _maybe_remove(store, "df2")
 | 
						|
        df2 = DataFrame(
 | 
						|
            {
 | 
						|
                "A": Series(
 | 
						|
                    range(3),
 | 
						|
                    index=[
 | 
						|
                        Timestamp("20010101"),
 | 
						|
                        Timestamp("20010102"),
 | 
						|
                        Timestamp("20020101"),
 | 
						|
                    ],
 | 
						|
                )
 | 
						|
            }
 | 
						|
        )
 | 
						|
        store.append("df2", df2)
 | 
						|
        df3 = DataFrame(
 | 
						|
            {"A": Series(range(3), index=date_range("2002-1-1", periods=3, freq="D"))}
 | 
						|
        )
 | 
						|
        store.append("df2", df3)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.filterwarnings(
 | 
						|
    "ignore:\\nthe :pandas.io.pytables.AttributeConflictWarning"
 | 
						|
)
 | 
						|
def test_retain_index_attributes2(setup_path):
 | 
						|
    with ensure_clean_path(setup_path) as path:
 | 
						|
 | 
						|
        with catch_warnings(record=True):
 | 
						|
 | 
						|
            df = DataFrame(
 | 
						|
                {
 | 
						|
                    "A": Series(
 | 
						|
                        range(3), index=date_range("2000-1-1", periods=3, freq="H")
 | 
						|
                    )
 | 
						|
                }
 | 
						|
            )
 | 
						|
            df.to_hdf(path, "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, "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, "data", mode="w", append=True)
 | 
						|
 | 
						|
        assert read_hdf(path, "data").index.name == "foo"
 | 
						|
 | 
						|
        with catch_warnings(record=True):
 | 
						|
 | 
						|
            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, "data", append=True)
 | 
						|
 | 
						|
        assert read_hdf(path, "data").index.name is None
 |