在数据帧的Dict中循环访问数据帧

时间:2015-08-08 05:19:24

标签: python loops dictionary pandas dataframe

我有一个包含多个工作表的excel文件,我正在使用Pandas读取Python。我目前正在使用命令

raw_data=pd.read_excel(...) 

从文件中读取数据(到DataFrame),之后我会对DataFrame执行大量计算。请参阅以下代码:

raw_data = pd.read_excel(r'/Users/linnk/Desktop/Results/01_05_2012 Raw Results.xls', skiprows=1, header=0, nrows=1440)   
raw_data[u'Time']= pd.to_datetime(raw_data[u'Time'], unit='d')   # Converts first column to datetime, to make averaging easier                                                           
raw_data.set_index(pd.DatetimeIndex(raw_data[u'Time']), inplace=True)
ave_data = raw_data.resample('h', how='mean')

raw_data.Time = pd.to_datetime(raw_data.Time)
def time_cat(t):
    hour = t.hour
    if(hour >= 5 and hour < 9):
        return 'Morning (5AM-9AM)'
    elif(hour >= 9 and hour < 18):
        return 'Day (9AM-6PM)'
    elif(hour >= 18 and hour < 22):
        return 'Evening (6PM-10PM)'
    else:
        return 'Night (10PM-5AM)'
ave_by_timeofday = raw_data.groupby(raw_data.Time.apply(time_cat)).mean()

有关信息,Excel文件中的工作表名称为&#39; Sheet1&#39;,&#39; Sheet2中&#39;等。当我将此代码运行到其他Excel文件(我确实需要这样做)时,它会发生变化。所有工作表都包含类似的数据:日期和时间索引列,列名称,然后是数字数据(正数和负数)。不同的工作表可能具有不同的列数。

我真正需要做的是对我的Excel文件中的所有工作表执行上述计算/数据框操作。据我所知,这意味着我需要改变

pd.read_excel() 

pd.read_excel(..., sheetname= 0)

但是,这会将raw_data变量转换为DataFrame的dict,而不仅仅是DataFrame。有人可以帮我创建一些循环遍历DataFrame的Dict的代码,并执行上面代码中显示的计算/操作每个DataFrame / Sheet 吗?我很遗憾没有在网上找到任何帮助我理解这一点的资源。

有人可以帮我找出将这些被操纵的DataFrame中的每一个导出到SQL的方法,这也很棒。我很难想到一种方法,而不是覆盖以前的数据。

如果您需要我发布其他信息,例如我的代码中的Excel文件数据或当前输出,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为创建ExcelFile对象可能会更好。由于没有示例数据,我无法解决您的实际问题,但一般来说我的策略如下:

@SpringBootApplication

ExcelFile对象具有属性EF = pd.ExcelFile('path/to/file.xlsx') ,该属性返回包含ExcelFile对象中所有工作表的列表。可以使用sheet_names单独解析每个工作表。然后将每个工作表作为数据框返回。所以你可以按如下方式迭代:

parse

希望这有用......