2016-07-18 101 views
0

我正在编写下面的Python代码来合并两个表格,这些表格可以在Excel中使用Vlookup完成,但希望为更大的数据集自动执行此过程。但是,看起来输出数据太大并且包含两个表中的所有列。我只是想用第二个表df_pos来查找一些列。你会看看我的代码是否有效或可行,以执行此任务?python pandas merge/vlookup tables

谢谢!

def weighted(mwa="mwa.csv",mwa2="mwa.csv",output="WeightedMWA.csv"): 
    df=pd.read_csv(mwa, thousands=",") 
    df['Keyword']=df['Keyword'].replace('+','') 
    df_pos=pd.read_csv("mwa.csv", thousands=",") 
    df_pos['Keyword']=df_pos['Keyword'].replace('+','') 
    sumImp=df_pos['Impr.'].sum() 
    sumPos=df_pos.groupby(by=['Keyword'])['Avg. Pos.'].sum() 
    df_pos['WeightedPos']=sumPos/sumImp 
    mergedDF=pd.merge(left=df, right=df_pos, how="left", left_on="Keyword",right_on="Keyword") 
    mergedDF.to_csv(output) 
+2

我认为这是最适合[codereview](http://codereview.stackexchange.com/)。 – shivsn

+0

我还没有用过Stackoverflow,我会在下次做。谢谢! – prodirector

回答

0

您没有向我们提供足够的信息。您正在输出合并的数据帧,但您尚未告知输出中需要哪些列。理想情况下,您只想保留输出中需要的列以及合并所需的列。

您可以通过参数read_csv函数及其usecols参数限制您导入的列。该documentation说:

usecols : array-like, default None 
    Return a subset of the columns. All elements in this array must either 
    be positional (i.e. integer indices into the document columns) or strings 
    that correspond to column names provided either by the user in `names` or 
    inferred from the document header row(s). For example, a valid `usecols` 
    parameter would be [0, 1, 2] or ['foo', 'bar', 'baz']. Using this parameter 
    results in much faster parsing time and lower memory usage. 
+0

Yeap,因为它包含真实数据,无法显示所有列的名称等。但会尝试这一点,让你知道。谢谢! – prodirector

+0

@prodirector是否解决了您的问题? – Matt

+0

嗨,我已经添加了这个'usecols',但我想我必须先解决合并部分。 – prodirector

0

如果你只是使用df_pos从另一个矩阵查找数据,只需使用领域df_pos作为索引帧你仰视的,即datasourcematrix数据[df_pos.LOOKUPCOLUMNNAME ]或者如果你没有列名,你可以做datasourcematrix [df_pos.ix [5]]或其他。更容易和更快...

+0

谢谢我会试试这个,并会让你知道。 – prodirector

+0

因此,基本上数据源和查找数据是相同的文件,我试过:mergedDF = df [df_pos.Keyword] 但结果表明,KeyError:“['谷物优惠券'谷物优惠券''谷物优惠券'... ,\ n'婴儿护理折扣''婴儿护理折扣''婴儿护理折扣']不在索引中“。 – prodirector

+0

是的,您的DataFrame索引不使用这些名称,请尝试使用ix [5]方法,直到找到正确的索引为止。循环通过0端。如果你使用Spyder IDE,它可以让你在变量资源管理器中轻松打开DataFrame – Matt