如何从 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
带有一个或多个分隔符whitespace
s - 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?的主要内容,如果未能解决你的问题,请参考以下文章