This is my code that works using python 3.3.3.2 64-bit
In [69]: df = pd.DataFrame() #make up a frame to your liking pd.DataFrame._metadata = ["testmeta"] print(pd.DataFrame._metadata) df.testmeta = "testmetaval" df.badmeta = "badmetaval" newframe = df.copy() print(newframe.testmeta) print("newframe", newframe.badmeta) df.to_json(r'c:\data\test.json') read_json = pd.read_json(r'c:\data\test.json') read_json.testmeta print(pd.version.version) print(np.version.full_version) Out[69]: ['testmeta'] testmetaval newframe badmetaval 0.15.2 1.9.1
JSON content as df:
In [70]: read_json Out[70]: Empty DataFrame Columns: [] Index: [] In [71]: read_json.info() <class 'pandas.core.frame.DataFrame'> Float64Index: 0 entries Empty DataFrame In [72]: read_json.testmeta Out[72]: 'testmetaval'
It is strange that the json that is written is just empty parentheses:
{}
which indicates that metadata is actually being distributed across the statement line: pd.DataFrame._metadata = ["testmeta"]
It seems to still work if you overwrite the 2nd atrtibute metadata:
In [75]: df.testmeta = 'foo' df2 = pd.DataFrame() df2.testmeta = 'bar' read_json = pd.read_json(r'c:\data\test.json') print(read_json.testmeta) print(df2.testmeta) testmetaval bar
EdChum Jan 20 '15 at 15:06 2015-01-20 15:06
source share