[英]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.