【问题标题】:Printing a single column in the data frame tables在数据框表中打印单列
【发布时间】:2021-10-07 23:42:54
【问题描述】:

下面的代码将mean,median,max,min 获取为pandas 表。我只想打印没有日期的表格的Average 部分。 print(*out["Average"].iloc[:, 1], sep="\n") 应该这样做,但该函数出现错误。我该如何解决这个问题?

import numpy as np
import pandas as pd
from pandas import DataFrame

date_list = ['2019-09-01 00:00:00', '2019-10-01 00:00:00', '2019-11-01 00:00:00',
 '2019-12-01 00:00:00', '2020-01-01 00:00:00', '2020-02-01 00:00:00', 
 '2020-03-01 00:00:00', '2020-04-01 00:00:00', '2020-05-01 00:00:00', 
 '2020-06-01 00:00:00', '2020-07-01 00:00:00', '2020-08-01 00:00:00',
 '2020-09-01 00:00:00','2020-10-01 00:00:00', '2020-11-01 00:00:00', 
 '2020-12-01 00:00:00','2021-01-01 00:00:00','2021-02-01 00:00:00', '2021-03-01 00:00:00', 
 '2021-04-01 00:00:00','2021-05-01 00:00:00', '2021-06-01 00:00:00', 
 '2021-07-01 00:00:00']
monthly_values = np.array([ 15., 39.6, 0.2, 34.3, 19.6, 26.8, 15.7, 26., 12.6, 15.5, 18.6, 2.3, 6.5,
   2.5, 12.2, 11.6, 93.9, 25.5, 26.5, -16.5, -1.4, -1.8, 5.])

data = pd.DataFrame({"Date": date_list, "Averages": monthly_values})
data["Date"] = pd.to_datetime(data["Date"])
out=(data.groupby(data["Date"].dt.year)
     .agg(['mean','median','max','min'])
     .droplevel(0,1)
     .rename(columns=lambda x:'Average' if x=='mean' else x.title()))
print(*out["Average"].iloc[:, 1], sep="\n")

错误:

IndexingError: Too many indexers

预期输出:

22.275
14.158333333333333
18.742857142857144

【问题讨论】:

  • 无法复制。运行您的代码会打印出预期的输出。
  • 我不确定为什么我在 Windows 10 上使用 python 3.7 我联系了一些人,他们说他们运行代码也没有问题。但我已经测试了多次,我得到了Error 输出。
  • 这里也没有问题。

标签: python pandas dataframe numpy datetime


【解决方案1】:

您的问题是 iloc 只接受一个参数。这有效:

print(out["Average"])

【讨论】:

  • 我收到这种类型的错误:TypeError: print() argument after * must be an iterable, not numpy.float64
  • @georgehere,我的错误,我删除了 print 语句中的 *,这是使用分隔符打印可迭代对象所必需的。
  • 我明白了,但这只会给我14.158333333333333 作为输出。我需要整个列的值,如预期输出所示
  • @georgehere,我已经编辑了我的答案。你真的根本不需要iloc 索引器
【解决方案2】:

在这种情况下,out['Average'] 只是给出了一个系列,所以你不需要.iloc

In [56]: out['Average']
Out[56]:
Date
2019    22.275000
2020    14.158333
2021    18.742857
Name: Average, dtype: float64

In [57]: print(*out['Average'], sep="\n")
22.275
14.158333333333333
18.74285714285714

在其他情况下,您的 groupby 可能会产生一个数据框,在这种情况下,您可能需要 iloc 索引来挑选一个系列。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 2023-03-26
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2020-09-11
    • 2022-01-13
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多