【问题标题】:Pandas aggregate function output to xlsxPandas 将函数输出聚合到 xlsx
【发布时间】:2017-07-17 19:14:19
【问题描述】:

我有使用 pandas 数据帧的 sqlite 查询。我已将这些数据帧传递给一个函数以获取聚合信息。如何使用函数的结果填充 Excel 工作表?即-如何将函数输出转换为数据框? (注意-我正在使用 openpyxl 创建工作簿)

这里是df和函数的代码:

# Nationwide measure statistics
nationwide_measures = pd.read_sql_query("""select state,
          measure_id,
          measure_name,
          score
from timely_and_effective_care___hospital;""", conn)

# Remove the non-numeric string values from 'score'
nationwide_measures1 = nationwide_measures[nationwide_measures['score'].astype(str).str.isdigit()]

# Change score to numeric
nationwide_measures1['score'] = pd.to_numeric(nationwide_measures1['score'])

# Function to grab measure values
def get_stats(group):
    return {'Minimum': group.min(), 'Maximum': group.max(), 'Average': group.mean(), 'Standard Deviation': group.std()}

# Function output    
nationwide_measures1['score'].groupby(nationwide_measures1['measure_id']).apply(get_stats).unstack()

我试过了:

# Function to grab measure values
def get_stats(group):
    return pd.DataFrame({'Minimum': group.min(), 'Maximum': group.max(), 'Average': group.mean(), 'Standard Deviation': group.std()})

但这会返回“值错误:如果使用所有标量值,则必须传递索引”

我也试过了:

# Function to grab measure values
def get_stats(group):
    df = pd.DataFrame({'Measure Name': group.columns['measure_name'],'Minimum': group.min(), 'Maximum': group.max(), 'Average': group.mean(), 'Standard Deviation': group.std()}, index = [0])
    return df

但这给出了错误:“AttributeError: 'Series' object has no attribute 'columns'”

【问题讨论】:

  • pd.DataFrame 您正在传递所有标量值并且没有可迭代,因此如果您添加 index = [0] 您将获得一个单行数据帧。 pd.DataFrame({'Minimum': group.min(), 'Maximum': group.max(), 'Average': group.mean(), '标准偏差': group.std()},index=[ 0])
  • 感谢@ScottBoston 的成功!我如何格式化列标题?每个都列为('Minimum',0)等......以及如何将索引命名为“Measure ID”
  • Hrm.. 没有要测试的数据。我想你可以试试 index=group.measure_id.head(1)
  • "AttributeError: 'Series' 对象没有属性 'measure_id'"
  • index=group.index[0]

标签: python function pandas dataframe


【解决方案1】:

在您的数据框创建语句 pd.DataFrame 行中,您将传递所有标量值并且没有可迭代对象,因此如果您添加 index = [0] 您将获得一个单行数据框。

pd.DataFrame({'Minimum': group.min(), 'Maximum': group.max(), 'Average': group.mean(), 'Standard Deviation': group.std()},index=[0]) 

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 2012-09-01
    • 1970-01-01
    • 2019-11-05
    • 2021-08-24
    • 2023-02-02
    • 2023-03-28
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多