【发布时间】: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