如何从 print() 编写的字符串中获取 Python pandas DataFrame?

Posted

技术标签:

【中文标题】如何从 print() 编写的字符串中获取 Python pandas DataFrame?【英文标题】:How to get Python pandas DataFrame from string written by print()? 【发布时间】:2017-09-20 03:46:05 【问题描述】:

这是问题的更新版本,提供了一个方便的功能

pd_read_printed(str_printed_df)

旨在从之前使用 print(some_pandas_DataFrame) 编写的字符串中创建一个 pandas DataFrame:

def pd_read_printed(str_printed_df):
    global pd, StringIO
    try: x = pd
    except: import pandas as pd
    try: x = StringIO
    except: from pandas.compat import StringIO
    return pd.read_csv(StringIO(str_printed_df), delim_whitespace=True)

在我得到以下问题的答案后,我把它放在一起供自己使用:

我经常在 Internet 上看到印刷版中的 pandas DataFrame 的内容,例如::

df1_as_string = """
 Sp   Mt   Value  count
4  MM2  S4   bg     10
5  MM2  S4   dgd    1
6  MM4  S2   rd     2
7  MM4  S2   cb     8
8  MM4  S2   uyi    8 
"""

问题是:如何从字符串变量中获取保存 DataFrame 的变量,样式如下:

df1 = pandas.someToMeUnknownPandasFunction(df1_as_string)

?

现在让我们使用提供的函数从df1_as_string 创建一个DataFrame:

df1 = pd_read_printed(df1_as_string)

并检查它是否按预期工作:

print(df1)

给出:

    Sp  Mt Value  count
4  MM2  S4    bg     10
5  MM2  S4   dgd      1
6  MM4  S2    rd      2
7  MM4  S2    cb      8
8  MM4  S2   uyi      8

【问题讨论】:

你在找pandas.read_clipboard()吗? 不久前我问过同样的问题:***.com/questions/43172452/… @beniev 是的......一个类似的问题,但你已经注意到当时已经在这里回答了:***.com/questions/40117799/…。 好的...所以如果您没有监督它,为什么要问这个问题...? @beniev 我想要print() 输出的答案,但我只找到了一些文本表并且没有意识到这将是相同的答案。现在,在我得到答案之后,我意识到我之前已经找到了它,但看不到它是我可以用于我的目的的……顺便说一句:我对没有 read_print( ) 在 pandas 中的函数,因为我(还)不熟悉 csv ... 【参考方案1】:

两种方法

选项 1pd.read_clipboard

这是我用于简单格式化数据帧的 goto 方法。我复制数据框文本并用df = pd.read_clipboard()跟进它

选项 2StringIO + pd.read_csv

对于结构更复杂的数据框,我可能需要read_csv 中的一些选项,所以我可能会这样设置。请记住,对于您提供的数据框,我几乎不会这样做,因为我获取数据框的速度较慢。

from io import StringIO
import pandas as pd

df1_as_string = """
 Sp   Mt   Value  count
4  MM2  S4   bg     10
5  MM2  S4   dgd    1
6  MM4  S2   rd     2
7  MM4  S2   cb     8
8  MM4  S2   uyi    8 
"""

df = pd.read_csv(StringIO(df1_as_string), delim_whitespace=True)

无论哪种情况,我都会得到:

print(df)

    Sp  Mt Value  count
4  MM2  S4    bg     10
5  MM2  S4   dgd      1
6  MM4  S2    rd      2
7  MM4  S2    cb      8
8  MM4  S2   uyi      8

【讨论】:

【参考方案2】:

使用read_clipboard

df = pd.read_clipboard()

read_csv 带有一个或多个分隔符whitespaces - sep='\s+'delim_whitespace=True

from pandas.compat import StringIO

df = pd.read_csv(StringIO(df1_as_string), sep="\s+")
df = pd.read_csv(StringIO(df1_as_string), delim_whitespace=True)

print (df)
    Sp  Mt Value  count
4  MM2  S4    bg     10
5  MM2  S4   dgd      1
6  MM4  S2    rd      2
7  MM4  S2    cb      8
8  MM4  S2   uyi      8

【讨论】:

很高兴能帮到您!美好的一天! read_clipboard() - 很好的 tip 可以处理关于 SO 问题的示例

以上是关于如何从 print() 编写的字符串中获取 Python pandas DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令输出中获取第二列?

如何从字符串中获取某些内容

从字符串中获取单词

如何从 Debugger.GetExpression 获取 DisplayString 字段?

如何在Python中使用OpenCV以特定顺序显示图像?

如何从输入的一组数字中获取最大值和最小值?