我有2个csv文件,每个文件只有1列,如下所示:
csv文件1:adam3us.csv
created_at
6/7/2018 19:00
6/6/2018 12:00
6/6/2018 9:00
6/6/2018 9:00
6/6/2018 5:00
6/5/2018 16:00
6/5/2018 7:00
6/4/2018 16:00
csv文件2:基于每小时的比特币
created_at
1/8/2017 0:00
1/8/2017 1:00
1/8/2017 2:00
1/8/2017 3:00
1/8/2017 4:00
1/8/2017 5:00
1/8/2017 6:00
6/7/2018 19:00
我正在尝试编写一个python脚本,它将使用循环将csv文件2的每个值与csv文件1中的每个条目进行比较,如果条目匹配,则应增加一个名为count的声明变量,然后应该写入一个新的csv文件,其中一列created_at包含两个csv文件相同的时间和一个值为count的第二列。
例如,第1次迭代将采用csv文件2的第1行,即6/7/2018 19:00,并将其值与csv文件中存在的每一行进行比较1.如果csv文件的第1行2匹配任何csv文件行1然后计数变量应递增。在这种情况下,它将csv文件2的第一行与csv文件1的最后一行匹配,并将计数从0递增到1,并将created_at的值和count的值写入名为output的新的单独csv文件中。此示例的输出文件应如下所示:
output.csv
created_at count
6/7/2018 19:00 1
对于每次迭代,count变量应设置为0,并且每次迭代都应重复该过程。
我的代码如下:
import csv
count=0
path1 = r'C:\Users\Ahmed Ismail Khalid\Desktop\Bullcrap Testing Delete Later\Bitcoin Prices Hourly Based.csv'
path2 = r'C:\Users\Ahmed Ismail Khalid\Desktop\Bullcrap Testing Delete Later\adam3us.csv'
path3 = r'C:\Users\Ahmed Ismail Khalid\Desktop\output.csv'
with open(path1,'rt',encoding='utf-8') as csvin:
reader1 = csv.reader(csvin)
for row in reader1:
b=row[0]
with open(path2,'rt',encoding='utf-8') as csvinpu:
with open(path3, 'w', newline='',encoding='utf-8') as csvoutput:
writer = csv.writer(csvoutput, lineterminator='\n')
reader2 = csv.reader(csvinpu)
all = []
row = next(reader2)
row.append('count')
all.append(row)
for row in reader2:
d=row[0]
if(b==d) :
count+=1
row.append(count)
all.append(row)
else:
row.append(count)
all.append(row)
writer.writerows(all)
任何和所有帮助将不胜感激。
由于
答案 0 :(得分:3)
使用pandas进行此类操作。
使用pandas将两个csv文件加载到两个数据框中,并取两列的交集。熊猫有内置功能。 pd.merge
Import pandas as pd
df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
output = pd.merge(df1, df2, how="inner", on="column_name") #column_name should be common in both dataframe
#how represents type of intersection. In your case it will be inner(INNER JOIN)
output['count'] = output.groupby('column_name')['column_name'].transform('size') #pandas query
final_output = output.drop_duplicates() #It will remove duplicate rows
希望,这会有所帮助。