脱敏算法—转换日期时间

文章介绍了多种时间脱敏方法,包括年份、月份、日期、时间等的转换,以保护敏感的个人信息。提供了使用Python的Pandas库来实现这些方法的代码示例,如将具体时间转换为时间段、星期、季度等模糊表达,从而在保持数据可用性的同时增强数据隐私。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间脱敏 保护敏感时间信息的隐私。一些时间脱敏方法:

1. 年份脱敏:将具体的年份转换为年代范围,例如将1990年转换为1990s。
2. 月份脱敏:将具体的月份转换为季度或季节,例如将7月转换为夏季。
3. 日期脱敏:将具体的日期转换为星期几,例如将2022年1月1日转换为星期六。
4. 时间脱敏:将具体的时间转换为时间段,例如将15:30转换为下午。
5. 时间戳脱敏:将具体的时间戳转换为时间段,例如将1612345678转换为下午。
6. 时区脱敏:将具体的时区转换为地区或国家,例如将GMT+8转换为中国。
7. 时段脱敏:将具体的时段转换为早晨、上午、下午、晚上等,例如将9:00-12:00转换为上午。
8. 时间间隔脱敏:将具体的时间间隔转换为范围,例如将30分钟转换为30分钟以内或30分钟以上。

9. 时间差脱敏:将具体的时间转换为与某个基准时间的时间差,例如将2022年1月1日转换为与当前时间的天数差。
10. 时间周期脱敏:将具体的时间转换为某个周期内的时间,例如将2022年1月1日转换为每月的第一天。
11. 时间分布脱敏:将具体的时间转换为符合某种分布的时间,例如将具体的时间转换为符合正态分布的时间。
12. 时间模糊脱敏:将具体的时间转换为模糊的时间范围,例如将2022年1月1日转换为2022年1月上旬。

时间段脱敏 将具体的时间采用时间段方式进行脱敏处理。(之前写过时间取整的方法)

import pandas as pd
from datetime import datetime
import time

# 定义时间段脱敏函数
def desensitize_time(time_str):
    time = datetime.strptime(str(time_str),"%Y-%m-%d %H:%M:%S")
    hour = time.hour
    if 0 <= hour < 6:
        return "凌晨"
    elif 6 <= hour < 12:
        return "上午"
    elif 12 <= hour < 18:
        return "下午"
    else:
        return "晚上"

# 读取csv文件
df = pd.read_excel('D:...ge/gapdata100_success.xlsx')
print(df.head())

time_list = df['timess']
# 遍历替换 调用函数
for i in range(len(time_list)):
    time1 = time_list[i]
    #截取前10字段
    time2 = str(time1)[:10]
    #对时间列进行脱敏
    time3 = desensitize_time(time1)
    time_list[i] = f'{time2} {time3}'
print(df)

# 保存文件
#df.to_excel('D:...gge/gapdata100_success_11111.xlsx', index=False)


# # 对时间列进行脱敏   只显示上下午 不显示日期了
#df['timess'] = df['timess'].apply(desensitize_time)

# # 示例用法
# time_str = "2022-01-01 08:30:00"
# desensitized_time = desensitize_time(time_str)
# print("当天日期:", time_str[:10])
# print("脱敏后的时间段:", desensitized_time)
## print(f'{time_str[:10]} {desensitized_time}')
'''
          timess
0 2016-02-08 11:50:00
1 2016-02-08 06:10:00
2 2016-02-08 12:10:00
           timess
0   2016-02-08 上午
1   2016-02-08 上午
2   2016-02-08 下午
'''

时间模糊脱敏  将具体的日期转换为一个范围或者一个模糊的时间段。

#import xlwt  # 先安装pip install
from datetime import datetime  # 注意一定要用datetime package
import pandas as pd

def blur_time(date):
    # 将日期字符串转换为datetime对象
    dt = datetime.strptime(date, '%Y-%m-%d')

    # 获取年份、月份和日期
    year = dt.year
    month = dt.month
    day = dt.day

    # 根据日期范围进行模糊化处理
    if day <= 10:
        time_range = '上旬'
    elif day <= 20:
        time_range = '中旬'
    else:
        time_range = '下旬'
    # 返回模糊化后的时间范围
    return f'{year}年{month}月{time_range}'


df = pd.read_csv('D:...set/data_wuliu.csv', encoding="utf-8",sep=',')
print(df.head())

time_list = df['销售时间']
# 遍历替换 调用函数
for i in range(len(time_list)):
    time1 = time_list[i]
    blur_date = blur_time(time1)    #调用函数
    time_list[i] = blur_date
print(df)

# 保存文件
#df.to_excel('D://.../data_wulius.xlsx', index=False)
'''
       订单号  订单行     销售时间       
0     P096311   10     2016-7-30    
1     P096826   10     2016-8-30 
       
       订单号  订单行     销售时间 
0     P096311   10     2016年7月下旬 
1     P096826   10     2016年8月下旬  
'''

日期脱敏  将具体的日期转换为星期几。

#import xlwt  # 先安装pip install
import datetime  # 注意这里
import pandas as pd

df = pd.read_csv('D:..set/data_wuliu.csv', encoding="utf-8",sep=',')
print(df.head())

time_list = df['销售时间']
# 遍历替换 调用函数
for i in range(len(time_list)):
    date_str = time_list[i]
    date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()  # 将字符串转换为datetime对象
    week_day = date.strftime('%A')  # 将日期转换为星期几,%A表示星期几的全称,例如'Saturday'
    time_list[i] = week_day
print(df)

# 保存文件
#df.to_excel('D:...data_wulius.xlsx', index=False)
'''
      订单号  订单行  销售时间
0     P096311   10  Saturday
1     P096826   10   Tuesday
2         NaN   20   Tuesday
'''

月份脱敏  将具体的月份转换为季度或者季节。

#import xlwt  # 先安装pip install
from datetime import datetime  # 注意一定要用datetime package
import pandas as pd

def convert_to_season(date_str):
    date = datetime.strptime(date_str, "%Y-%m-%d")
    year = date.year
    month = date.month

    if month in [1, 2, 3]:
        season = "第一季度"    #可以改成 春夏秋冬
    elif month in [4, 5, 6]:
        season = "第二季度"
    elif month in [7, 8, 9]:
        season = "第三季度"
    else:
        season = "第四季度"
    return f"{year}年{season}"

df = pd.read_csv('D:.../data_wuliu.csv', encoding="utf-8",sep=',')
print(df.head())

time_list = df['交货时间']
# 遍历替换 调用函数
for i in range(len(time_list)):
    time1 = time_list[i]
    season_str = convert_to_season(time1)    #调用函数
    time_list[i] = season_str
print(df)

# 保存文件
#df.to_excel('D:.../data_wulius.xlsx', index=False)
'''
       订单号  订单行   销售时间     交货时间
0     P096311   10   2016-7-30    2016年第三季度 
1     P096826   10   2016-8-30    2016年第四季度 
2         NaN   20   2016-8-30    2016年第四季度 
'''

年份脱敏  将具体的年份转换为年代范围,例如将1990年转换为1990s或者199X。

#import xlwt  # 先安装pip install
from datetime import datetime  # 注意一定要用datetime package
import pandas as pd

def convert_to_decade(year):
    decade = year[:3] + 'X'
    return decade

df = pd.read_csv('D:...set/data_wuliu.csv', encoding="utf-8",sep=',')
print(df.head())

time_list = df['销售时间']
# 遍历替换 调用函数
for i in range(len(time_list)):
    time1 = time_list[i]
    year = time1.split('-')[0]
    decade = convert_to_decade(year)  #调用函数
    time_list[i] = decade
print(df)

# 保存文件
#df.to_excel('D:.../data_wulius.xlsx', index=False)
'''
#1999年转换为1990s方法,只需将函数替换
def convert_to_decade(year):
    decade = year // 10 * 10
    return f"{decade}s"

date = "2016-7-30"
year = int(date.split("-")[0])   #以及调用函数时,转为int类型 两处不同
decade = convert_to_decade(year)
print(decade)
'''
'''
      订单号  订单行   销售时间 
0     P096311   10     201X 
2         NaN   20     201X  
3     P097435   10     201X  
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值