2017-04-23 19 views
5

Đây là một phiên bản cập nhật của câu hỏi cung cấp một chức năng tiện dụngLàm thế nào để có được các chú gấu trúc Python DataFrame từ chuỗi được viết bởi print()?

pd_read_printed(str_printed_df)

được thiết kế để tạo ra một DataFrame gấu trúc ra khỏi chuỗi bằng văn bản trước đây sử dụng in (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) 

Tôi đặt nó lại với nhau để sử dụng riêng sau khi tôi đã có câu trả lời cho câu hỏi sau đây:

tôi thấy trong Internet thường là nội dung của một DataFrame gấu trúc trong phiên bản in của nó giống như ví dụ ::

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

Câu hỏi đặt ra là: Làm thế nào để có được một biến giữ DataFrame từ một biến chuỗi trong một phong cách như:

df1 = pandas.someToMeUnknownPandasFunction(df1_as_string) 

?

VỚI DOANH NGHIỆP chúng ta hãy sử dụng chức năng cung cấp để tạo ra một DataFrame từ df1_as_string:

df1 = pd_read_printed(df1_as_string) 

và kiểm tra xem nó hoạt động như mong đợi:

print(df1) 

cho:

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

Có thể bạn đang tìm kiếm cho 'pandas.read_clipboard() '? – Serenity

+0

Tôi đã hỏi câu hỏi tương tự cách đây không lâu: http: //stackoverflow.com/questions/43172452/convert-text-table-to-pandas-dataframe –

+0

@beniev yes ... câu hỏi SIMILAR, nhưng bạn đã giám sát điều đó nó đã được tại thời điểm đó trả lời ở đây: http://stackoverflow.com/questions/40117799/python-pandas-text-file-to-dataframe. – Claudio

Trả lời

6

Sử dụng read_clipboard.

df = pd.read_clipboard() 

Hoặc read_csv với tách một hoặc nhiều whitespace s - sep='\s+' hoặc 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

Vui mừng có thể giúp bạn! Ngày tốt lành! – jezrael

+0

'read_clipboard()' - Nice * tip * để làm việc với các ví dụ từ các câu hỏi trên SO –

4

Hai phương pháp

tùy chọn 1
pd.read_clipboard

Đây là phương pháp goto tôi cho dataframes chỉ đơn giản là định dạng. Tôi sao chép văn bản dataframe và làm theo nó lên với df = pd.read_clipboard()

tùy chọn 2
StringIO + pd.read_csv

Đối dataframes có cấu trúc phức tạp hơn, tôi có thể cần một số tùy chọn trong read_csv để tôi có thể thiết lập theo cách này. Hãy nhớ rằng đối với khung dữ liệu bạn đã cung cấp, tôi gần như không bao giờ làm theo cách này bởi vì nó chậm hơn để tôi nhận được tại một khung dữ liệu.

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) 

Trong cả hai trường hợp, tôi kết thúc với:

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 
Các vấn đề liên quan