【问题标题】:Output data from all columns in a dataframe in pandas [duplicate]输出熊猫数据框中所有列的数据[重复]
【发布时间】:2012-07-06 21:35:31
【问题描述】:

我有一个名为 params.csv 的 csv 文件。我打开ipython qtconsole 并使用以下方法创建了一个熊猫dataframe

import pandas
paramdata = pandas.read_csv('params.csv', names=paramnames)

其中,paramnames 是一个字符串对象的 Python 列表。 paramnames示例(实际列表长度为22):

paramnames = ["id",
"fc",
"mc",
"markup",
"asplevel",
"aspreview",
"reviewpd"]

在 ipython 提示符下,如果我键入 paramdata 并按 Enter 键,那么我不会获得包含列和值的数据框,如 Pandas website 上的示例所示。相反,我得到了有关数据框的信息。我明白了:

In[35]: paramdata
Out[35]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 59 entries, 0 to 58
Data columns:
id                    59  non-null values
fc                    59  non-null values
mc                    59  non-null values
markup                59  non-null values
asplevel              59  non-null values
aspreview             59  non-null values
reviewpd              59  non-null values

如果我输入paramdata['mc'],那么我确实会得到mc 列的值。我有两个问题:

(1) 在 pandas 网站上的示例中(例如,参见 df 的输出:http://pandas.sourceforge.net/indexing.html#additional-column-access),输入数据框的名称会给出实际数据。为什么我得到如上所示的数据框信息而不是实际数据?我需要在某处设置一些输出选项吗?

(2) 如何将数据框中的所有列输出到屏幕,而无需输入它们的名称,即无需输入paramdata[['id','fc','mc']] 之类的内容。

我使用的是熊猫 0.8 版。

谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    用途:

    pandas.set_option('display.max_columns', 7)
    

    这将强制 Pandas 显示您拥有的 7 列。或更笼统地说:

    pandas.set_option('display.max_columns', None)
    

    这将强制它显示任意数量的列。

    解释:max_columns 的默认值是0,它告诉 Pandas 仅当所有列都可以压缩到控制台宽度时才显示表格。

    或者,您可以使用以下命令将控制台宽度(以字符为单位)从默认值 80 更改为:

    pandas.set_option('display.width', 200)
    

    【讨论】:

    【解决方案2】:

    屏幕上要显示的数据太多,因此改为显示摘要。

    如果你还是想输出数据(它可能不适合屏幕并且看起来不太好):

    print paramdata.values
    

    将数据框转换为其 numpy-array 矩阵表示形式。

    paramdata.columns
    

    存储各自的列名和

    paramdata.index
    

    存储相应的索引(行名)。

    【讨论】:

    • -1 我认为应该提到set_printoptionsparamdata.values 不是一个好的解决方案,因为numpy 可能不会全部显示(取决于大小)并且索引信息会丢失。
    【解决方案3】:

    我知道这是一个老问题,但我刚刚遇到了类似的问题,我认为我所做的也对你有用。

    我使用了 to_csv() 方法并写入标准输出:

    import sys
    
    paramdata.to_csv(sys.stdout)
    

    这应该转储整个数据帧,无论它是否可以很好地打印,并且您可以使用 to_csv 参数来配置列分隔符、是否打印索引等。

    编辑:现在可以使用None 作为.to_csv() 的目标,效果类似,可以说要好得多:

    paramdata.to_csv(None)
    

    【讨论】:

    • .to_csv(None) 是切肉刀 :-)
    【解决方案4】:

    ipython 中,我使用它来打印运行良好的数据帧的一部分(打印前 100 行):

    print paramdata.head(100).to_string()
    

    【讨论】:

      【解决方案5】:

      您也可以使用DataFrame.head(x) / .tail(x) 来显示DataFrame 的第一/最后x 行。

      【讨论】:

        【解决方案6】:

        我从 R 来到 python,R 的 head() 函数以非常方便的方式换行以查看数据:

        > head(cbind(mtcars, mtcars, mtcars))
                           mpg cyl disp  hp drat    wt  qsec vs am gear carb  mpg cyl
        Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 21.0   6
        Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 21.0   6
        Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 22.8   4
        Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 21.4   6
        Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8
        Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 18.1   6
                          disp  hp drat    wt  qsec vs am gear carb  mpg cyl disp  hp
        Mazda RX4          160 110 3.90 2.620 16.46  0  1    4    4 21.0   6  160 110
        Mazda RX4 Wag      160 110 3.90 2.875 17.02  0  1    4    4 21.0   6  160 110
        Datsun 710         108  93 3.85 2.320 18.61  1  1    4    1 22.8   4  108  93
        Hornet 4 Drive     258 110 3.08 3.215 19.44  1  0    3    1 21.4   6  258 110
        Hornet Sportabout  360 175 3.15 3.440 17.02  0  0    3    2 18.7   8  360 175
        Valiant            225 105 2.76 3.460 20.22  1  0    3    1 18.1   6  225 105
                          drat    wt  qsec vs am gear carb
        Mazda RX4         3.90 2.620 16.46  0  1    4    4
        Mazda RX4 Wag     3.90 2.875 17.02  0  1    4    4
        Datsun 710        3.85 2.320 18.61  1  1    4    1
        Hornet 4 Drive    3.08 3.215 19.44  1  0    3    1
        Hornet Sportabout 3.15 3.440 17.02  0  0    3    2
        Valiant           2.76 3.460 20.22  1  0    3    1
        

        我开发了以下小 Python 函数来模仿此功能:

        def rhead(x, nrow = 6, ncol = 4):
            pd.set_option('display.expand_frame_repr', False)
            seq = np.arange(0, len(x.columns), ncol)
            for i in seq:
                print(x.loc[range(0, nrow), x.columns[range(i, min(i+ncol, len(x.columns)))]])
            pd.set_option('display.expand_frame_repr', True)
        

        (显然,这取决于 pandas 和 numpy)

        【讨论】:

          【解决方案7】:

          您可以使用序列切片语法,即

          paramdata[:5] # first five records
          paramdata[-5:] # last five records
          paramdata[:] # all records
          

          有时数据框可能不适合屏幕缓冲区,在这种情况下,您最好打印一个小子集或将其导出到其他东西、绘图或(再次使用 csv)

          【讨论】:

            猜你喜欢
            • 2021-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-15
            • 1970-01-01
            相关资源
            最近更新 更多