【发布时间】:2018-12-13 06:35:28
【问题描述】:
我正在尝试对一些数据集进行一些清理,我可以使用一些 for 循环来完成任务,但我想要一种更 Pythonic/pandorable 的方式来做到这一点。
这是我想出的代码,数据不是真实的..但它应该可以工作
import pandas as pd
# This is a dataframe containing the correct values
correct = pd.DataFrame([{"letters":"abc","data":1},{"letters":"ast","data":2},{"letters":"bkgf","data":3}])
# This is the dataframe containing source data
source = pd.DataFrame([{"c":"ab"},{"c":"kh"},{"c":"bkg"}])
for i,word in source["c"].iteritems():
for j,row in correct.iterrows():
if word in row["letters"]:
source.at[i,"c"] = row["data"]
break
这是我尝试一种可取的方式,但由于列表理解返回生成器而失败:
source["c"] = source["c"].apply(
lambda x: row["data"] if x in row["letters"] else x for row in
correct.iterrows()
)
【问题讨论】:
标签: python pandas dataframe lambda series