[英]How to merge two CSV files by value in column using pandas PYTHON
我有 2 个 csv 文件的价格和性能。
这是每个的数据布局
价钱:
表现:
我使用以下命令将它们导入 python:
import pandas as pd
price = pd.read_csv("cpu.csv")
performance = pd.read_csv("geekbench.csv")
这按预期工作,但是我不确定如何创建一个新的 csv 文件,在 Price[brand + model] 和 Performance[name] 之间匹配
我要拿:
使用上面的这些参数创建一个新的 csv 文件。 问题 我一直在寻找一种很好的匹配方法,该方法忽略了大小写等细微差异,我正在研究模糊字符串匹配等算法,但不确定最佳选择是什么。
这是我当前的尝试,但会引发错误;
for i in range(len(price.index)):
brand = (price.iloc[i, 0])
model = (price.iloc[i, 1])
print(model)
print(performance)
print(performance.query('name == brand+model'))
谢谢
我建议如下:
import nltk
import pandas as pd
tokenizer = nltk.RegexpTokenizer(r'\w+')
price = pd.DataFrame({"brand": ["AMD", "AMD", "AMD", "AMD"],
"model" : ["2650", "3800", "5150", "4200"],
"cores" : [2,4,4,4],
"tdp" : [25,25,25,25]})
performance = pd.DataFrame({"name": ["AMD Athlon 64 3200+",
"AMD Athlon 64 X2 3800+",
"AMD Athlon 64 X2 4000+",
"AMD Athlon 64 X2 4200+"],
"score" : [6,5,6,18]})
# I break down the name in performance and suppress capital letters
performance["tokens"] = (performance["name"].str.lower()
.apply(tokenizer.tokenize))
# And the same for price
price["tokens"] = price.loc[:,"brand"].values + " " + \
price.loc[:,"model"].values
price["tokens"] = (price["tokens"].str.lower()
.apply(tokenizer.tokenize))
# cartesian product
price["key"] = 1
performance["key"] = 1
df = pd.merge(price,performance, on = "key")
# define my criteria for match
n_match = 2
df['intersection'] =\
[len(list(set(a).intersection(set(b))))
for a, b in zip(df.tokens_x,
df.tokens_y)]
df = df.loc[df["intersection"]>=n_match,:]
我重新定义了你的数据集,以便在这个例子中我们会有一些匹配。 这是我的结果:
brand model cores ... score tokens_y intersection
5 AMD 3800 4 ... 5 [amd, athlon, 64, x2, 3800] 2
15 AMD 4200 4 ... 18 [amd, athlon, 64, x2, 4200] 2
[2 rows x 10 columns]
您可以重新定义n_match
的标准我放了两个,因为它似乎是数据集所需要的。 希望能帮助到你
您可以在价格中创建“名称”列后合并 2 个帧,然后将其与该“名称”上的 Performane 合并。
Price['name'] = Price.brand + ' ' + Price.model.astype(str)
Price.merge(Performance, on='name')
但是,结果框架可能是空的,因为至少您在问题中显示的示例数据行不匹配。 这不是例如大写的语言问题,而只是缺少信息。 只有在用“真实语言”定义关系规则后,您才能用 Python 对其进行编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.