2017-07-17 48 views
3

我有我已经转向熊猫数据框的sqlite查询。我已经将这些数据框传递给一个函数来获取聚合信息。我如何使用函数的结果填充Excel工作表?即如何将功能输出转换为数据帧? (注意:我使用openpyxl创建工作簿)熊猫集合函数输出到xlsx

下面是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的:‘系列’对象有没有属性‘列’”

+0

pd.DataFrame你传递所有的标量值和没有迭代,所以如果你添加索引= [0],你会得到一个标志行数据框。 pd.DataFrame({'Minimum':group.min(),'Maximum':group.max(),'Average':group.mean(),'Standard Deviation':group.std()},index = [ 0]) –

+0

谢谢@ScottBoston工作!我怎样才能格式化列标题?每一个被列为('最小',0)等....以及如何命名索引“测量ID” – zsad512

+0

赫姆..没有数据测试。我想你可以试试index = group.measure_id.head(1) –

回答

0

在您的数据帧创建语句,pd.DataFrame行,你通过了所有标值和无iterables,所以如果你添加索引= [0],你会得到一个单行数据框。

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