DataFrame.to_dict() 并不总是可逆的
DataFrame.to_dict() is not always invertible
我的主要观点是:
assert_frame_equal(DataFrame.from_dict(df.to_dict()), df)
在某些情况下会失败。我很乐意提供一个可重现的示例,但 (i) 数据太大 post,并且 (ii) 为此,我需要提供一个序列化的 DataFrame(这正是失败的地方...... .)
这是一个已知问题吗?我做错了什么吗?
失败的一个原因是 df.to_dict()
创建了一个 Python 字典。不保证字典的键以任何特定顺序排列。
DataFrame 的列名映射到字典键,并且根据 this question,列的顺序在测试 DataFrame 相等性时很重要。
这个事实很容易验证:
>>> df = pd.DataFrame(columns=['a', 'c', 'b'])
>>> pd.util.testing.assert_frame_equal(df, pd.DataFrame(df.to_dict()))
# AssertionError
您可以将许多 keyword arguments 传递给测试以指定要检查或忽略的条件,包括 check_names=False
(默认情况下为 True
) .
我的主要观点是:
assert_frame_equal(DataFrame.from_dict(df.to_dict()), df)
在某些情况下会失败。我很乐意提供一个可重现的示例,但 (i) 数据太大 post,并且 (ii) 为此,我需要提供一个序列化的 DataFrame(这正是失败的地方...... .)
这是一个已知问题吗?我做错了什么吗?
失败的一个原因是 df.to_dict()
创建了一个 Python 字典。不保证字典的键以任何特定顺序排列。
DataFrame 的列名映射到字典键,并且根据 this question,列的顺序在测试 DataFrame 相等性时很重要。
这个事实很容易验证:
>>> df = pd.DataFrame(columns=['a', 'c', 'b'])
>>> pd.util.testing.assert_frame_equal(df, pd.DataFrame(df.to_dict()))
# AssertionError
您可以将许多 keyword arguments 传递给测试以指定要检查或忽略的条件,包括 check_names=False
(默认情况下为 True
) .