Python来遍历表和删除列

我需要阅读一个Excel文件,并在每张纸上执行一些计算。 基本上,如果列date不是“今天”,它需要删除行。

到目前为止我得到了这个代码:

导入date时间导入pandas作为PD

''' Parsing main excel sheet to save transactions != today's date ''' mainSource = pd.ExcelFile('path/to/file.xlsx') dfs = {sheet_name: mainSource.parse(sheet_name) for sheet_name in mainSource.sheet_names } for i in dfs: now = datetime.date.today(); dfs = dfs.drop(dfs.columns[6].dt.year != now, axis = 1); # It is the 6th column if datetime.time()<datetime.time(11,0,0,0): dfs.to_excel(r'path\to\outpt\test\'+str(i)+now+'H12.xlsx', index=False); #Save as sheetname+timestamp+textstring else: dfs.to_excel(r'path\to\output\'+str(i)+now+'H16.xlsx', index=False) 

运行脚本时,出现以下错误:

 dfs = dfs.drop(...): AttributeError: 'dict' object has no attribute 'drop' 

有什么build议么?

谢谢!

我想你需要把i DataFrames dfs[i] ,因为dfsDataFrames字典:

 df1 = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':['10-05-2011','10-05-2012','10-10-2016']}) df1.C = pd.to_datetime(df1.C) print (df1) ABC 0 1 4 2011-10-05 1 2 5 2012-10-05 2 3 6 2016-10-10 df2 = pd.DataFrame({'A':[3,5,7], 'B':[9,3,4], 'C':['08-05-2013','08-05-2012','10-10-2016']}) df2.C = pd.to_datetime(df2.C) print (df2) ABC 0 3 9 2013-08-05 1 5 3 2012-08-05 2 7 4 2016-10-10 names = ['a','b'] dfs = {names[i]:x for i, x in enumerate([df1,df2])} print (dfs) {'a': ABC 0 1 4 2011-10-05 1 2 5 2012-10-05 2 3 6 2016-10-10, 'b': ABC 0 3 9 2013-08-05 1 5 3 2012-08-05 2 7 4 2016-10-10} 

通过boolean indexing删除所有行:

 for i in dfs: now = pd.datetime.today().date(); print (now) #select 3.column, in real data replace to 5 mask = dfs[i].iloc[:,2].dt.date == now print (mask) df = dfs[i][mask] print (df) 2016-10-10 0 False 1 False 2 True Name: C, dtype: bool ABC 2 3 6 2016-10-10 2016-10-10 0 False 1 False 2 True Name: C, dtype: bool ABC 2 7 4 2016-10-10 if datetime.time()<datetime.time(11,0,0,0): df.to_excel(r'path\to\outpt\test\'+str(i)+now+'H12.xlsx', index=False); else: df.to_excel(r'path\to\output\'+str(i)+now+'H16.xlsx', index=False)