Come leggere un dataframe abbastanza stampato in un dataframe Panda?

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

Ho un dataframe :

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])

Usando questo , lo stampo abbastanza:

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

Risultato:

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

Salvandolo in un file di testo:

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

Come posso rileggere PrettyPrintOutput.txtin un dataframe senza eseguire manualmente molte elaborazioni di testo?

Risposte

2 above_c_level Aug 23 2020 at 15:25

Una soluzione è usare argomenti di parole chiave intelligenti in 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]]

Definisco semplicemente tutte le righe che iniziano con "+" come commenti, quindi non vengono importate. Ciò non aiuta contro la terza riga, che deve essere esclusa utilizzando skiprow.

La seconda riga è necessaria perché si finisce con colonne aggiuntive utilizzando il "|" come separatore. Se conosci in anticipo i nomi delle colonne, usa la parola chiave usecolsper essere esplicito.

Produzione:

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

Funziona anche con pd.read_clipboard, perché le funzioni accettano gli stessi argomenti di parole chiave.