Datawhale-Pandas中文教程[12]

补充习题

Ex7

import re
import tqdm
arules = '\[.*\|.* .*\] .* \| .* \| .* .*'
# 匹配了[<str>|<str> <str>] <str> | <str> | <str> <str> 的正则表达式
brules = '\[.*\|(?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31) (0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9]):(0?[0-9]|[1-5][0-9])\] .* \| .* \| .* .*'
# 更加精细的匹配规则,约束了年月日,时间的有效性
# 这个规则会剔除闰年2月29日
tol = []
with open("H:/adversarial_attack/joyful_pandas/data/ch7/logs.txt", "r") as f:
    for txt in tqdm.tqdm(f.readlines()):
        if re.match(brules, txt.strip()):
            a = txt.replace('[', '').replace(']', '').replace('\n', '').split('|')
            time = [f"{a[1].split(' ')[0]} {a[1].split(' ')[1]}"]
            info = [f"{a[1][(a[1].find('#'))+1:].replace('#','-').rstrip()}"]
            a.remove(a[1])
            a = a + time + info
            tol.append(a)
# 首先对序列进行处理,处理完再转为DataFrame
# 不要在for里转为dataframe数据并添加,会慢到怀疑人生
df = pd.DataFrame(tol,columns = ['type', 'file_id', 'size','time','id'])
dfff = df.set_index('type')
push_df = dfff.loc['PUSH']
save_df = dfff.loc['SAVE']
# 分成两个表
# push_df.merge(save_df, on='file_id', how='left')
# 使用merge进行合并,键为file_id,这里是连接的知识(忘了)
my_df = push_df.merge(save_df, on='file_id', how='left').rename(columns={'size_x':'file_size',
                                                            'size_y':'save_size',
                                                            'id_x':'push_from',
                                                            'id_y':'push_to',
                                                            'time_x':'push_time',
                                                            'time_y':'save_time',
                                                            })
order = ['file_id', 'file_size', 'save_size', 'push_from', 'push_to', 'push_time', 'save_time']
my_df = my_df[order]

# 匹配标准时分秒https://blog.csdn.net/weixin_34185396/article/details/111988753
# 匹配标准年月日https://www.cnblogs.com/fnlingnzb-learner/p/11804303.html

上述操作对应了题目中的导入数据和一部分数据清洗的过程
剩下待补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值