Python-如果csv文件中满足条件,则添加时间戳列
我有一个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
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
这回答了你的问题吗?