迭代Pandas DF的列表然后迭代每个DF的行

时间:2016-08-12 12:08:12

标签: python pandas nltk

这可能是一个有点疯狂的问题...... 我有一个Pandas DF的文章然后我分成多个DF,所以每个DF只包含特定年份的文章。然后我将这些变量放入名为box_of_years的列表中。

indexed_df = article_db.set_index('date')
indexed_df = indexed_df.sort_index()

year_2004 = indexed_df.truncate(before='2004-01-01', after='2004-12-31')
year_2005 = indexed_df.truncate(before='2005-01-01', after='2005-12-31')
year_2006 = indexed_df.truncate(before='2006-01-01', after='2006-12-31')
year_2007 = indexed_df.truncate(before='2007-01-01', after='2007-12-31')
year_2008 = indexed_df.truncate(before='2008-01-01', after='2008-12-31')
year_2009 = indexed_df.truncate(before='2009-01-01', after='2009-12-31')
year_2010 = indexed_df.truncate(before='2010-01-01', after='2010-12-31')
year_2011 = indexed_df.truncate(before='2011-01-01', after='2011-12-31')
year_2012 = indexed_df.truncate(before='2012-01-01', after='2012-12-31')
year_2013 = indexed_df.truncate(before='2013-01-01', after='2013-12-31')
year_2014 = indexed_df.truncate(before='2014-01-01', after='2014-12-31')
year_2015 = indexed_df.truncate(before='2015-01-01', after='2015-12-31')
year_2016 = indexed_df.truncate(before='2016-01-01', after='2016-12-31')

box_of_years = [year_2004, year_2005, year_2006, year_2007,
                year_2008, year_2009, year_2010, year_2011,
                year_2012, year_2013, year_2014, year_2015,
                year_2016]

我已经编写了各种函数来标记,清理并将标记转换为FreqDist对象并将它们包装成一个名为year_prep()的函数。我做的时候这很好用

year_2006 = year_prep(year_2006)

...但是有没有办法可以遍历每年变量,应用函数并让它转换相同的变量,而不是每年重复上述变量?

我知道重复自己将是最简单的方式,但不一定是最干净的。我可能有这个向后并且稍后进行切片但是在那一点上我觉得列表的层次将是无法控制的,因为我将从多年的列表变为多年的列表,包含文章列表,包含文章中每个单词的列表。

1 个答案:

答案 0 :(得分:2)

我认为您可以groupby使用year自定义函数:

import pandas as pd

start = pd.to_datetime('2004-02-24')
rng = pd.date_range(start, periods=30, freq='50D')

df = pd.DataFrame({'Date': rng, 'a':range(30)})  
#print (df)

def f(x):
    print (x)
    #return year_prep(x)
    #some custom output 
    return x.a + x.Date.dt.month

print (df.groupby(df['Date'].dt.year).apply(f))