我有两个csv文件,其中第一列是时间戳。我最终希望获得每行两次的差值。
import csv
import datetime
with open('file1.csv', 'rb')as csvfile:
filereader = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader, None)
for column in filereader:
date = column[0]
parsed_date = datetime.strptime(date, '%H:%M:%S')
with open('file2.csv', 'rb')as csvfile:
filereader2 = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader2, None)
for column2 in filereader:
date2 = column2[0]
parsed_date = datetime.strptime(date, '%H:%M:%S')
time_delta = (parsed_date - parsed_date2)
现在,我的代码仅使用parsed_date的第一个实例,因为我已将其从循环中取出。如何获得所有值?我试过在for循环中读取第二个csv文件,但随后程序冻结(我认为是因为它循环不断)。
答案 0 :(得分:1)
我建议同时读取两个csv文件并保存适用的数据。然后将两者压缩在一起,然后对每个元组执行不同的压缩操作
答案 1 :(得分:1)
关于代码的注释很少。
import csv
import datetime
with open('file1.csv', 'rb')as csvfile:
filereader = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader, None)
for column in filereader:
date = column[0]
parsed_date = datetime.strptime(date, '%H:%M:%S') #this var will be recreated on each loop iteration
with open('file2.csv', 'rb')as csvfile:
filereader2 = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader2, None)
for column2 in filereader:
date2 = column2[0]
parsed_date = datetime.strptime(date, '%H:%M:%S')
time_delta = (parsed_date - parsed_date2) # parsed_date2 - doesn't exist as was never created, time_delta is lost on each iteration
这意味着您一直在丢失要使用的数据。为了解决您的问题,请先读取文件,然后再读取数据:
import csv
import datetime
first_file_dates = []
second_file_dates = []
with open('file1.csv', 'rb')as csvfile:
filereader = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader, None)
for column in filereader:
first_file_dates.append(datetime.strptime(column[0], '%H:%M:%S'))
with open('file2.csv', 'rb')as csvfile:
filereader2 = csv.reader(csvfile, delimiter=',')
for headers in range(2):
next(filereader2, None)
for column in filereader:
second_file_dates.append(datetime.strptime(column[0], '%H:%M:%S'))
for k,v in zip(first_file_dates, second_file_dates):
print(k-v)
请注意,压缩会将对象的长度缩短为最短的数组。
答案 2 :(得分:0)
这可以通过以下方式完成:将两个csv分别读取到一个数据帧中,然后合并到索引上并创建第3列作为增量。