Python 如何将输出显示为数据帧?

Python 如何将输出显示为数据帧?,python,pandas,Python,Pandas,目前,我得到的输出是字符串格式。我不知道如何将该字符串转换为数据帧。 我的输出中有3个不同的表。它是字符串格式的。 以下两种解决方案之一适用于我: 将该字符串输出转换为3个不同的数据帧。或 更改函数中的某些内容,以便将输出作为3个不同的数据帧 我曾尝试使用RegEx将字符串输出转换为数据帧,但在我的情况下无法工作,因为我希望输出是动态的。如果我再提供一个输入,它应该会起作用 def column_ch(self, sample_count=10): report = render("he

目前,我得到的输出是字符串格式。我不知道如何将该字符串转换为数据帧。 我的输出中有3个不同的表。它是字符串格式的。 以下两种解决方案之一适用于我:

将该字符串输出转换为3个不同的数据帧。或 更改函数中的某些内容,以便将输出作为3个不同的数据帧

我曾尝试使用RegEx将字符串输出转换为数据帧,但在我的情况下无法工作,因为我希望输出是动态的。如果我再提供一个输入,它应该会起作用

def column_ch(self, sample_count=10):
    report = render("header.txt")
    match_stats = []
    match_sample = []
    any_mismatch = False
    for column in self.column_stats:
        if not column["all_match"]:
            any_mismatch = True
            match_stats.append(
                {
                    "Column": column["column"],
                    "{} dtype".format(self.df1_name): column["dtype1"],
                    "{} dtype".format(self.df2_name): column["dtype2"],
                    "# Unequal": column["unequal_cnt"],
                    "Max Diff": column["max_diff"],
                    "# Null Diff": column["null_diff"],
                }
            )
            if column["unequal_cnt"] > 0:
                match_sample.append(
                    self.sample_mismatch(column["column"], sample_count, for_display=True)
                )

    if any_mismatch:
        for sample in match_sample:
            report += sample.to_string()
            report += "\n\n"
            print("type is", type(report))
    return report

因为您有一个字符串,所以可以将字符串传递到类似于缓冲区的文件中,然后将其读入数据帧

假设带有数据帧的字符串被称为
dfstring
,代码如下所示:

import io
bufdf = io.StringIO(dfstring)
df = pd.read_csv(bufdf, sep=???)
如果字符串包含多个数据帧,请使用
split
将其拆分并使用循环

import io
dflist = []
for sdf in dfstring.split('\n\n'): ##this seems the separator between two dataframes
    bufdf = io.StringIO(sdf)
    dflist.append(pd.read_csv(bufdf, sep=???))
小心传递适当的
sep
参数,我的
表示我无法理解什么是合适的参数。您的字段由空格分隔,因此您可以使用
sep='\s+'
),但我发现您也有空格,它们不是分隔符,因此这可能会导致分析错误。
sep
接受正则表达式,因此要有两个连续的空格作为分隔符,您可以这样做:
sep='\s\s+'
(这需要一个额外的参数
engine='python'
)。但同样,请确保两个连续字段之间至少有2个空格

有关
io
模块和
StringIO
的参考,请参阅

请注意,
io
模块存在于python3中,但不存在于python2中(它有另一个名称),但由于最新的pandas版本需要python3,我猜您正在使用python3。

您能给我们提供更多的上下文吗?很难理解你到底想做什么。@Valentino很抱歉这么糟糕的描述。我第一次在这里问一个问题。所以基本上,我希望我的输出是一个数据帧。当我返回report函数时,我得到一个字符串。(以我所附的3个表格的形式)。需要帮助找出将其转换为熊猫数据帧的方法。我不明白的是输入是如何组织的。显示类的方法,但不显示类或输入本身。如果已经有数据帧,请返回它。或者在返回之前进行一些选择/操作。如果您有稀疏列表或字典,请构建一个数据帧并返回它。输入是从SQL server加载的两个表。该类具有一些有助于比较这些表的函数。因此,输入的形式不是数据帧。我需要将数据加载回SQL server,为此,我需要首先将其转换为数据帧。如果这有助于你更好地了解情况,请告诉我:不是真的,对不起。如何从SQL中读取数据?熊猫有其独特的功能。您可以使用它们将SQL数据直接读入数据框并返回。这是有意义的。但是因为我有三张不同的桌子。。我需要创建3个独立的数据帧。如果传递适当的sep参数,如何创建3个单独的数据帧?另外,是否可以在某个地方使用startswith()方法来指定分离..这是不可能的<代码>读取csv创建一个数据帧。您需要先断开字符串,传递缓冲区中的每个段,然后使用
read\u csv
读取缓冲区。我已经编辑了我的答案。