这是提供便利功能的问题的更新版本
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)
在我得到以下问题的答案之后,我把它放在一起供自己使用:
我在互联网上经常看到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
答案 0 :(得分:9)
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
答案 1 :(得分:4)
两种方法
这是我简单格式化数据帧的goto方法。我复制数据框文本并使用df = pd.read_clipboard()
选项2
StringIO
+ 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