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
包含所有数据(我截断了输出)。
然后您可以使用 io
和 read_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/