[英]How to get Python pandas DataFrame from string written by print()?
這是一個提供便利功能的問題的更新版本
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
創建一個df1_as_string
:
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
使用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
兩種方法
這是我簡單格式化數據幀的goto方法。 我復制數據df = pd.read_clipboard()
文本並使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.