【问题标题】:How to read in pretty-printed dataframe into a Pandas dataframe?如何将打印精美的数据框读入 Pandas 数据框?
【发布时间】:2020-12-12 07:04:59
【问题描述】:
# necessary imports
from tabulate import tabulate
import pandas as pd

我有一个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])

使用this,我可以打印出来:

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

Saving它到一个文本文件:

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

如何在不手动进行大量文本处理的情况下将PrettyPrintOutput.txt 读回dataframe

【问题讨论】:

  • 也许您可以考虑腌制它而不是写入文本文件?
  • 是的,这也适合一般用途。我以上述方式寻找解决方案的主要原因之一是我经常在 SO 上发布以类似方式给出的数据框,并且发现很难重现它们。
  • IMO,DataFrames 的漂亮打印版本令人讨厌(最好在没有装饰器的情况下使用简单的 print,或者使用 to_string() 方法,以便有人可以使用 StringIO 进行复制)。对于漂亮的打印,我最终复制它们,删除线条,然后找到并替换'|'和 ''。否则,您最终会在字符串列/列标题上遇到各种空白问题。当然你可以剥离它,但它最终会成为更多代码

标签: python pandas dataframe pretty-print


【解决方案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]]

我只是将所有以“+”开头的行定义为 cmets,因此它们不会被导入。这对第三行没有帮助,必须使用 skiprow 排除。

需要第二行,因为您最终会使用“|”获得额外的列作为分隔符。如果您事先知道列名,请使用关键字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,因为函数接受相同的关键字参数。

【讨论】:

  • object 列和列标题在这种方法中存在问题。您需要将它们全部剥离。
猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-12-06
  • 2022-06-13
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多