きれいに印刷されたデータフレームをPandasデータフレームに読み込む方法は?

Aug 23 2020
# necessary imports
from tabulate import tabulate
import pandas as pd

私はデータフレームを持っています:

df = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   'C': ['C0', 'C1', 'C2', 'C3'],
                   'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])

これを使用して、私はそれをきれいに印刷します:

prettyprint=tabulate(df, headers='keys', tablefmt='psql')
print(prettyprint)

結果:

+----+-----+-----+-----+-----+
|    | A   | B   | C   | D   |
|----+-----+-----+-----+-----|
|  0 | A0  | B0  | C0  | D0  |
|  1 | A1  | B1  | C1  | D1  |
|  2 | A2  | B2  | C2  | D2  |
|  3 | A3  | B3  | C3  | D3  |
+----+-----+-----+-----+-----+

テキストファイルに保存する:

with open("PrettyPrintOutput.txt","w") as text_file:
    text_file.wite(prettyprint)

多くのテキスト処理を手動で行わずPrettyPrintOutput.txtに、データフレームに読み戻すにはどうすればよいですか?

回答

2 above_c_level Aug 23 2020 at 15:25

1つの解決策は、pd.read_csv/で巧妙なキーワード引数を使用することですpd.read_clipboard

    df = pd.read_csv(r'PrettyPrintOutput.txt', sep='|', comment='+', skiprows=[2], index_col=1)
    df = df[[col for col in df.columns if 'Unnamed' not in col]]

'+'で始まるすべての行をコメントとして定義するだけなので、インポートされません。これは、skiprowを使用して除外する必要がある3番目の行に対しては役に立ちません。

'|'を使用して追加の列が作成されるため、2行目が必要です。セパレーターとして。事前に列名がわかっている場合は、キーワードusecolsを明示的に使用してください。

出力:

       A      B      C      D   
                                
0      A0     B0     C0     D0  
1      A1     B1     C1     D1  
2      A2     B2     C2     D2  
3      A3     B3     C3     D3 

pd.read_clipboard関数は同じキーワード引数を受け入れるため、これも機能します。