Como ler um dataframe bem impresso em um dataframe Pandas?
# necessary imports
from tabulate import tabulate
import pandas as pd
Eu tenho um 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 isso , eu imprimo:
prettyprint=tabulate(df, headers='keys', tablefmt='psql')
print(prettyprint)
Resultado:
+----+-----+-----+-----+-----+
| | A | B | C | D |
|----+-----+-----+-----+-----|
| 0 | A0 | B0 | C0 | D0 |
| 1 | A1 | B1 | C1 | D1 |
| 2 | A2 | B2 | C2 | D2 |
| 3 | A3 | B3 | C3 | D3 |
+----+-----+-----+-----+-----+
Salvando em um arquivo de texto:
with open("PrettyPrintOutput.txt","w") as text_file:
text_file.wite(prettyprint)
Como posso ler PrettyPrintOutput.txtem um dataframe sem fazer muito processamento de texto manualmente?
Respostas
Uma solução é usar argumentos de palavras-chave inteligentes em 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]]
Eu apenas defino todas as linhas que começam com '+' como comentários, para que não sejam importadas. Isso não ajuda na terceira linha, que deve ser excluída com o skiprow.
A segunda linha é necessária porque você acaba com colunas adicionais usando o caractere '|' como separador. Se você souber os nomes das colunas com antecedência, use a palavra usecols- chave para ser explícito.
Resultado:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
Também funciona com pd.read_clipboard, porque as funções aceitam os mesmos argumentos de palavra-chave.