【问题标题】:python pandas merge/vlookup tablespython pandas合并/vlookup表
【发布时间】:2016-07-18 14:18:25
【问题描述】:

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

谢谢!

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)

【问题讨论】:

  • 我觉得这个最适合codereview
  • 我没用过Stackoverflow,下次再用。谢谢!

标签: python csv pandas merge lookup


【解决方案1】:

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

您可以通过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.

【讨论】:

  • 是的,因为它包含真实数据,所以无法显示所有列的名称等等。但会试试这个,让你知道。谢谢!
  • @prodirector 解决了你的问题吗?
  • 嗨,我已经添加了这个“usecols”,但我想我必须先修复合并部分。
【解决方案2】:

如果您只是使用 df_pos 从另一个矩阵中查找数据,只需使用 df_pos 中的字段作为您正在从中查找数据的帧的索引,即 datasourcematrix[df_pos.LOOKUPCOLUMNNAME] 或者如果您没有列名,您可以执行 datasourcematrix[df_pos.ix[5]] 或其他任何操作。更轻松、更快捷...

【讨论】:

  • 谢谢你,我会试试这个并告诉你。
  • 所以,基本上数据源和查找数据是同一个文件,我试过:mergedDF=df[df_pos.Keyword] 但结果显示,KeyError: "['cereal coupons' 'cereal coupons' '谷物优惠券' ...,\n '婴儿护理折扣' '婴儿护理折扣' '婴儿护理折扣'] 不在索引中”。
  • 是的,因此您的 DataFrame 索引不使用这些名称,请尝试 ix[5] 方法,直到找到正确的索引。循环通过 0 端。如果您使用 Spyder IDE,它可以让您在变量资源管理器中轻松打开 DataFrame
  • 所以我一直在尝试这个方法,结果给我一个错误,ValueError: cannot index with vector contains NA / NaN values。这是否意味着我在索引列中有 NA 值?我实际上没有任何 NA 值,想知道这是否是因为我以错误的方式调用 pd.read_csv 造成的? df=pd.read_csv(mwa, crowd=",") df_pos=pd.read_csv(mwa2,usecols=['Keyword', 'Impr.', 'Avg. Pos.'],thousands=",")跨度>
猜你喜欢
  • 2022-11-13
  • 2019-11-04
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多