2017-04-23 122 views
5

這是問題的一個更新的版本提供了一個方便的功能如何從print()寫入的字符串獲取Python pandas DataFrame?

pd_read_printed(str_printed_df)

旨在打造大熊貓數據框出使用打印(some_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) 

在我回到以下問題後,我把它放在一起供自己使用:

我在網上經常看到大熊貓數據框的內容,它的印刷版本,例如例如::

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 
""" 

的問題是:如何獲得一個變量從字符串變量保存數據框的風格如:

df1 = pandas.someToMeUnknownPandasFunction(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 
+0

可能是你正在尋找'pandas.read_clipboard() '? – Serenity

+0

不久前我問過同樣的問題:http://stackoverflow.com/questions/43172452/convert-text-table-to-pandas-dataframe –

+0

@beniev是...一個類似的問題,但你已經監督它已經在那個時候在這裏回答:http://stackoverflow.com/questions/40117799/python-pandas-text-file-to-dataframe。 – Claudio

回答

6

使用read_clipboard

df = pd.read_clipboard() 

或者read_csv與分離器的一個或多個whitespace秒 - 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 
+0

很高興能幫到你!美好的一天! – jezrael

+0

'read_clipboard()' - 不錯*小費*與SO上的問題示例一起工作 –

4

兩種方法

選項1
pd.read_clipboard

這是我簡單地格式化dataframes轉到方法。我複製數據框中的文本,並跟進df = pd.read_clipboard()

選項2
StringIO + pd.read_csv

對於dataframes有更復雜的結構,我可能需要一些選項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 
相關問題