Python-如果csv文件中满足条件,则添加时间戳列

Python-如果csv文件中满足条件,则添加时间戳列,python,pandas,csv,datetime,Python,Pandas,Csv,Datetime,我有一个csv文件,如下所示: MAC bc:95:50:0a:82:80 bc:95:50:0a:82:80 bc:95:50:0a:82:80 bc:95:50:0a:82:80 bc:95:50:0a:85:60 bc:95:50:0a:85:60 bc:95:50:0a:85:60 bc:95:50:0a:85:60 bc:95:50:0a:85:60 bc:95:50:9e:58:40 bc:95:50:9e:58:40 bc:95:50:9e:58:40 bc:95

我有一个csv文件,如下所示:

       MAC
bc:95:50:0a:82:80
bc:95:50:0a:82:80
bc:95:50:0a:82:80
bc:95:50:0a:82:80

bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60

bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
        MAC             Time
bc:95:50:0a:82:80   2020-11-30 7:05
bc:95:50:0a:82:80   2020-11-30 7:10
bc:95:50:0a:82:80   2020-11-30 7:15
bc:95:50:0a:82:80   2020-11-30 7:20

bc:95:50:0a:85:60   2020-11-30 7:05
bc:95:50:0a:85:60   2020-11-30 7:10
bc:95:50:0a:85:60   2020-11-30 7:15
bc:95:50:0a:85:60   2020-11-30 7:20
bc:95:50:0a:85:60   2020-11-30 7:25

bc:95:50:9e:58:40   2020-11-30 7:05
bc:95:50:9e:58:40   2020-11-30 7:10
bc:95:50:9e:58:40   2020-11-30 7:15
bc:95:50:9e:58:40   2020-11-30 7:20
我的csv文件中有3个MAC地址,我想为每个MAC地址添加一个5分钟的时间戳,如下所示:

       MAC
bc:95:50:0a:82:80
bc:95:50:0a:82:80
bc:95:50:0a:82:80
bc:95:50:0a:82:80

bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60
bc:95:50:0a:85:60

bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
bc:95:50:9e:58:40
        MAC             Time
bc:95:50:0a:82:80   2020-11-30 7:05
bc:95:50:0a:82:80   2020-11-30 7:10
bc:95:50:0a:82:80   2020-11-30 7:15
bc:95:50:0a:82:80   2020-11-30 7:20

bc:95:50:0a:85:60   2020-11-30 7:05
bc:95:50:0a:85:60   2020-11-30 7:10
bc:95:50:0a:85:60   2020-11-30 7:15
bc:95:50:0a:85:60   2020-11-30 7:20
bc:95:50:0a:85:60   2020-11-30 7:25

bc:95:50:9e:58:40   2020-11-30 7:05
bc:95:50:9e:58:40   2020-11-30 7:10
bc:95:50:9e:58:40   2020-11-30 7:15
bc:95:50:9e:58:40   2020-11-30 7:20
现在我只能生成时间戳:

dt = datetime.datetime(2020, 11, 30, 7, 5, 0)
end = datetime.datetime(2020, 11, 30, 23, 59, 59)
step = datetime.timedelta(minutes=5)

result = []
while dt < end:
    result.append(dt.strftime('%Y-%m-%d %H:%M:%S'))
    dt += step
wtr = csv.writer(open ('out.csv', 'w'), delimiter=',', lineterminator='\n')
for x in result:
    wtr.writerow ([x])
dt=datetime.datetime(2020,11,30,7,5,0)
end=datetime.datetime(2020,11,30,23,59,59)
步骤=datetime.timedelta(分钟=5)
结果=[]
而dt

但是我不知道如何将这些时间戳添加到MAC列。

如果我理解正确,您希望将时间列添加到csv文件中。时间列以五分钟的间隔保存时间戳

我建议在处理csv文件时使用pandas,因为pandas数据帧非常容易操作。请参阅下面的代码,并让我知道它是否解决了您的问题

import pandas as pd

csv_file_path = "something.csv"
new_csv_file_path = "something_wtimestamp.csv"
df = pd.read_csv(csv_file_path)
timestamp_index = pd.date_range(
    start=pd.Timestamp(2020, 11, 30, 7, 5, 0), 
    end=pd.Timestamp(2020, 11, 30, 23, 59, 59), 
    freq='5T') #T = minute
timestamp_col = pd.Series(timestamp_index)
df["Time"] = timestamp_col
df.to_csv(new_csv_file_path)


如果起始和结束配置为与MAC列的长度完全匹配,则可以跳过将索引转换为序列。作为一个系列,时间戳将只填充当前行(即,被切断)。这就省去了计算5分钟*长度的数据帧的麻烦。

@Henry,我已经创建了下面的数据帧,但您可以从CSV中读取

df = pd.DataFrame({'MAC': {0: 'bc:95:50:0a:82:80',
  1: 'bc:95:50:0a:82:80',
  2: 'bc:95:50:0a:82:80',
  3: 'bc:95:50:0a:82:80',
  4: 'bc:95:50:0a:85:60',
  5: 'bc:95:50:0a:85:60',
  6: 'bc:95:50:0a:85:60',
  7: 'bc:95:50:0a:85:60',
  8: 'bc:95:50:0a:85:60',
  9: 'bc:95:50:9e:58:40',
  10: 'bc:95:50:9e:58:40',
  11: 'bc:95:50:9e:58:40',
  12: 'bc:95:50:9e:58:40',
  13: 'bc:95:50:9e:58:40'}})

import datetime
import csv
import numpy as np

dt = datetime.datetime(2020, 11, 30, 7, 5, 0)
step = datetime.timedelta(minutes=5)
  
df['cumct'] = df.groupby('MAC').cumcount()+1
df['date'] = df['cumct'] * step + dt
df = df.drop(columns='cumct')
df.to_csv('out.csv', index=False)
out.csv文件如下所示-

MAC,date
bc:95:50:0a:82:80,2020-11-30 07:10:00
bc:95:50:0a:82:80,2020-11-30 07:15:00
bc:95:50:0a:82:80,2020-11-30 07:20:00
bc:95:50:0a:82:80,2020-11-30 07:25:00
bc:95:50:0a:85:60,2020-11-30 07:10:00
bc:95:50:0a:85:60,2020-11-30 07:15:00
bc:95:50:0a:85:60,2020-11-30 07:20:00
bc:95:50:0a:85:60,2020-11-30 07:25:00
bc:95:50:0a:85:60,2020-11-30 07:30:00
bc:95:50:9e:58:40,2020-11-30 07:10:00
bc:95:50:9e:58:40,2020-11-30 07:15:00
bc:95:50:9e:58:40,2020-11-30 07:20:00
bc:95:50:9e:58:40,2020-11-30 07:25:00
bc:95:50:9e:58:40,2020-11-30 07:30:00

这回答了你的问题吗?