【问题标题】:getting different results when using lambdas and standard python function使用 lambdas 和标准 python 函数时得到不同的结果
【发布时间】:2019-12-23 15:04:16
【问题描述】:

i 有一个 csv 文件的 business_ids 和一个带有 business_ids 和其他列的 review.json。我们需要比较并获取具有相同 business_ids 的评论。

我已从 csv 文件中检索 business_ids 并使用 lambdas 执行它。我使用标准函数尝试了同样的方法。结果不匹配

现有代码: 结果是 [594862 行 x 9 列] 和 类型:pandas.core.frame.DataFrame

businesses = pd.read_csv('business_list.csv')

review_reader = pd.read_json('review.json', lines=True, chunksize=100000)

business_ids = businesses['business_id'].values


reviews_updated = [review.loc[review['business_id'].apply(lambda x: x in business_ids)] for review in review_reader]

reviews_updated = pd.concat(reviews_updated)

我的代码: 结果是 [6884 行 x 9 列] 和 类型是 pandas.core.frame.DataFrame

for review in review_reader:
    review_business = review


def func(x):
    return x in business_ids

reviews = review_business.loc[review_business['business_id'].apply(func)]

我不知道我哪里错了..

【问题讨论】:

  • 功能是相同的,但看起来你正在用它们做两件不同的事情
  • 感谢您的回复..请您详细说明..我认为它们也是相同的..但我不知道为什么我得到不同的结果..另外,需要改变什么才能得到期望的结果..这将帮助我了解我哪里出错了
  • 如果您提供 DataFrame 的示例,会更容易提供帮助...我不明白为什么您的代码中有一个 for 循环,只分配 review_business。在这个 for 循环结束时,您将只有 review_business 等于 review_reader 中的最后一个 review 并且不会做更多的事情。
  • @SmileyProd:我使用 read_json 将超过 3GB 的数据读入 review_reader,使其成为一个 json 对象。所以,如果我打印评论阅读器,我会得到“pandas.io.json.json.JsonReader”。当我迭代它时,我会得到一个数据框(评论)......类型(review_business)是一个pandas.core.frame.DataFrame ..所以我将所有数据放入一个数据框,然后开始比较business_ids ..跨度>
  • @ARC:我知道你想迭代review_reader,但是当你迭代时,你只做一个赋值,在你的for循环中没有更多。也许您没有复制粘贴整个代码,但如果您这样做了,我建议您在 for 循环中添加更多代码,因为现在您的 for 循环等效于 review_business = review_header[-1]。这就是为什么您的行数较少的原因,这是因为您只在最后一个 df 中查找数据而不是所有 df

标签: python-3.x pandas lambda list-comprehension data-science


【解决方案1】:
review_df = pd.DataFrame(columns=['business_id', 'cool', 'date', 'funny', 'review_id', 'stars', 'text', 'useful', 'user_id'])


for review in review_reader:
    review_df = review_df.append(review)

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2018-08-01
    • 2020-11-30
    • 2012-08-08
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多