python - 如何从字符串表示中检索 pandas 数据框?

标签 python pandas dataframe

pandas DataFrame 对象有一个 to_string() 方法,该方法在 __repr__ 魔术方法上调用。因此,当我说 x = f'{df}' 时,x 将是数据帧 df 的字符串表示形式。

如何检索(重建)仅包含 x 的数据帧?所以我想要一个名为 get_dataframe_from_string(df: str) -> pd.DataFrame 的方法来获取字符串并返回数据帧。

该方法应该是通用的,因此它也应该适用于多索引。

最佳答案

TL;DR

使用df.to_csv()而不是df.__str__()就可以了。

str(df) 不起作用

简短的回答是:你不能。至少不是 pandas 的内置字符串表示形式。

原因是 df.__repr__ 没有(数学)反函数:

import pandas as pd


df = pd.DataFrame.from_dict(dict(x=range(100), y=range(100)))
print(df)
#      x   y
# 0    0   0
# 1    1   1
# 2    2   2
# 3    3   3
# 4    4   4
# ..  ..  ..
# 95  95  95
# 96  96  96
# 97  97  97
# 98  98  98
# 99  99  99

无法知道第 5-94 行包含什么内容。

解决方案:df.to_csv

人们可以想出一些技巧来解决这个问题,但在我看来,唯一明智的方法是使用众所周知的 pandas 方法,例如to_csv:

str_df = df.to_csv()
print(str_df)
# ,x,y
# 0,0,0
# 1,1,1
# 2,2,2
# 3,3,3

其中 str_df 包含所有数据(我截断了输出)。

然后您可以使用 ioread_csv 取回原始数据帧:

import io

original_df = pd.read_csv(io.StringIO(str_df))
print(original_df)
#     Unnamed: 0   x   y
# 0            0   0   0
# 1            1   1   1
# 2            2   2   2
# 3            3   3   3
# 4            4   4   4
# ..         ...  ..  ..
# 95          95  95  95
# 96          96  96  96
# 97          97  97  97
# 98          98  98  98
# 99          99  99  99

请注意,Unnamed 列之所以存在,是因为我们没有排除行名称。这些可以在 df.to_csv 中排除。

关于python - 如何从字符串表示中检索 pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70433633/

相关文章:

Python Unicode 导出到 CSV,删除 'u' 字符

python - 在 Pandas 中展开数组

python - 组合多个列名相同但索引不同的 Pandas 系列

python - 交换numpy数组中的列?

python - 从 .m matlab 文件中声明的矩阵创建 numpy 数组

python - 理解级别 =0 和 group_keys

python - pandas groupby 访问最后一组

python - 预测 scikit-learn 分类运行需要多长时间

python - 如何计算形状线串和点之间的距离(3D)

python-3.x - pd.to_gbq() 从 pandas 加载到 bigquery() 是否有限制?