1

我有 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 文件的相同时间,另一列包含计数值。

例如,第一次迭代将获取 csv 文件 2 的第一行,即 6/7/2018 19:00,并将其值与 csv 文件 1 中存在的每一行进行比较。如果 csv 文件 2 的第一行匹配任何csv 文件 1 的行,然后计数变量应递增。在这种情况下,它将 csv 文件 2 的第一行与 csv 文件 1 的最后一行匹配,并将 count 从 0 增加到 1,并将 created_at 的值和 count 的值写入名为 output 的新单独 csv 文件. 此示例的输出文件应如下所示:

输出.csv

created_at        count
6/7/2018 19:00      1

每次迭代的计数变量都应设置为 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)

任何和所有的帮助将不胜感激。

谢谢

4

1 回答 1

3

使用pandas进行此类操作。

使用 pandas 将两个 csv 文件加载到两个数据框中,并取两列的交集。Pandas 具有内置功能。 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 

希望,它会有所帮助。

于 2018-06-10T16:07:48.517 回答