Come leggere un dataframe abbastanza stampato in un dataframe Panda?
# 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.txt
in un dataframe senza eseguire manualmente molte elaborazioni di testo?
Risposte
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 usecols
per 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.