【问题标题】:Panda dataframe print to console without column names熊猫数据框打印到没有列名的控制台
【发布时间】:2020-07-22 19:00:47
【问题描述】:

我有一个像这样的数据框:

    0   1   2   3   4   5   6   7   8   class
0   0.4444  0.0000  0.0000  0.0000  0.1111  0.0000  0.2222  0.0000  0.0000  0
1   0.4444  0.3333  0.3333  0.4444  0.6667  1.0000  0.2222  0.1111  0.0000  0
2   0.2222  0.0000  0.0000  0.0000  0.1111  0.1111  0.2222  0.0000  0.0000  0

我希望在没有换行符和列名的情况下将其打印在控制台上:

0.4444,0.0000,0.0000,0.0000,0.1111,0.0000,0.2222,0.0000,0.0000,0
0.4444,0.3333,0.3333,0.4444,0.6667,1.0000,0.2222,0.1111,0.0000,0
0.2222,0.0000,0.0000,0.0000,0.1111,0.1111,0.2222,0.0000,0.0000,0
..

总共有 360 行。

我是 Pandas 的新手,不知道如何实现这一点。我尝试将 pandas 转换为 numpy 数组,列出并尝试使用 print(data, end='') 打印,但没有一个对我有用。

已解决:

如果有人遇到类似问题, 使用 df_to_csv 和 sys.stdout 解决: df.to_csv(sys.stdout, header=False, index=False, float_format='%.4f')

【问题讨论】:

    标签: python pandas list numpy dataframe


    【解决方案1】:
    df.to_string(index=False, header=False)
    

    这表示,将数据框转换为字符串,但没有索引标签和列(标题)标签。

    【讨论】:

      【解决方案2】:

      问:如何打印没有列的 pandas 数据框

      答:

      print('\n'.join(df.to_string(index = False).split('\n')[1:]))
      

      解释:

      dfstr   = df.to_string(index = False) # Make str, possibly remove index
      dfrows  = dfstr.split('\n')           # split on rows
      dfprint = dfrows[1:]                  # Do not print row 0 (columns)
      dfp     = '\n'.join(dfprint)          # Create a single string again
      

      【讨论】:

        【解决方案3】:

        您可以使用f-strings 在循环中使用print 值,使用join 表示小数点后3 位:

        for x in df.values:
            print (','.join(f'{y:.4f}' for y in x))
        
        0.4444,0.0000,0.0000,0.0000,0.1111,0.0000,0.2222,0.0000,0.0000,0.0000
        0.4444,0.3333,0.3333,0.4444,0.6667,1.0000,0.2222,0.1111,0.0000,0.0000
        0.2222,0.0000,0.0000,0.0000,0.1111,0.1111,0.2222,0.0000,0.0000,0.0000
        

        如果不希望换行获取一行数据:

        for x in df.values:
            print (','.join(f'{y:.4f}' for y in x), end='')
        
        0.4444,0.0000,0.0000,0.0000,0.1111,0.0000,0.2222,0.0000,0.0000,0.00000.4444,0.3333,0.3333,0.4444,0.6667,1.0000,0.2222,0.1111,0.0000,0.00000.2222,0.0000,0.0000,0.0000,0.1111,0.1111,0.2222,0.0000,0.0000,0.0000
        

        【讨论】:

        • @Jerzrael-你错过了最后一个值不应该是 .4f 的点,它的整数应该是 0 或 1。即使没有新行,它也应该像控制台中的行一样打印.我已经尝试过类似的解决方案(没有换行符),它没有通过自动检查
        • @ahim 所以问题是每行只有最后一个值需要整数吗?因为不明白没有换行符。因为如果end='' 使用换行符,它会像我上一个解决方案一样将每一行连接在一起。我很困惑,因为您的预期输出有换行符,因为每一行都在单独的行中。你能解释一下没有换行符是什么意思吗?
        • @jezral:最后一行之后应该没有新行,我使用 df.to_csv 和 sys.stdout 解决了问题
        【解决方案4】:

        我试过这样做,我可以找到这段代码:

        def print_df(df):
           # This code delete index and columns names
           df_ = df.copy()
           df_.columns = ['', '', '', '']
           df_.index = ['' for _ in range(len(df))]
           print(df_)
        
        print_df(df)
        

        我发现的其他方式,但列格式的值之间没有正确的空格:

        [print(*row, sep=', ') for row in df.values.tolist()];
        

        【讨论】:

        • 列表解析有效,但在最后一个值之后打印“,”,这不是必需的
        • 我编辑列表理解以删除最后一个','
        • 使用 df.to_csv(sys.stdout,header=False,index=False,float_format='%.4f') 解决了这个问题
        猜你喜欢
        • 2021-04-17
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        相关资源
        最近更新 更多