【发布时间】:2020-05-22 10:02:09
【问题描述】:
如果我有 2 个 csv 文件如下:
csv1.csv:
1,Bob,Bob@gmail.com,baseball
2,Tom,Tom@gmail.com.football
3,Bill,Bill@gmail.com,softball
...
csv2.csv:
baseball, b1
football, f1
...
我正在寻找一种 Python 方法,将 csv1 中的错误值(csv1 中的第三列等于 csv2 中的第一列))替换为 csv2 中的正确值(第二列)。
应该是这样的:
1,Bob,Bob@gmail.com,b1
2,Tom,Tom@gmail.com,f1
3,Bill,Bill@gmail.com,softball
我的代码不起作用。
import csv
table1 = r'data.csv'
table2 = r'facebook_creo.csv'
creo_desc = dict()
with open(table2) as tbl2:
t2 = csv.reader(tbl2, delimiter=',')
next(t2)
for t2row in t2:
wrong_creo = t2row[0]
desc = t2row[1]
creo_desc[wrong_creo] = desc
with open(table1) as tbl1:
t1 = csv.reader(tbl1, delimiter=',')
for t1row in t1:
wrong_creo = t1row[8]
t1.writerow(t1row[8])
熊猫版:
import pandas as pd
data = pd.read_csv(r'data.csv')
creo = pd.read_csv(r'creo.csv')
adset = pd.read_csv(r'adset.csv')
campaign = pd.read_csv(r'campaign.csv')
CreoDict = pd.Series(creo.iloc[:,1].values,index=creo.iloc[:,0]).to_dict()
AdsetDict = pd.Series(adset.iloc[:,1].values,index=adset.iloc[:,0]).to_dict()
CampaignDict = pd.Series(adset.iloc[:,1].values,index=adset.iloc[:,0]).to_dict()
data.iloc[:,8] = data.iloc[:,8].replace(CreoDict)
data.iloc[:,6] = data.iloc[:,6].replace(AdsetDict)
data.iloc[:,4] = data.iloc[:,4].replace(CampaignDict)
data.to_csv(r'total.csv')
【问题讨论】:
-
如果我理解正确,
csv2.csv包含csv1.csv的第三列中每个可能值的翻译表? -
@HampusLarsson 是的,对。这只是一个样本。实际上,第一张桌子要大得多。
标签: python python-3.x pandas csv