当前位置: 代码迷 >> 综合 >> 数据处理——时间戳处理
  详细解决方案

数据处理——时间戳处理

热度:25   发布时间:2023-11-23 04:41:15.0

pandas对表格数据中的时间戳进行处理

先上原始数据内容,以上内容中有坐标值x,y;准确率,时间戳,地点id。我们在做数据分析时为了更好的进行特征提取,往往会对时间戳进行处理。

 row_id       x       y  accuracy    time    place_id
0       0  0.7941  9.0809        54  470702  8523065625
1       1  5.9567  4.7968        13  186555  1757726713
2       2  8.3078  7.0407        74  322648  1137537235
3       3  7.3665  2.5165        65  704587  6567393236
4       4  4.0961  1.1307        31  472130  7440663949
5       5  3.8099  1.9586        75  178065  6289802927
6       6  6.3336  4.3720        13  666829  9931249544
7       7  5.7409  6.7697        85  369002  5662813655
8       8  4.3114  6.9410         3  166384  8471780938
9       9  6.3414  0.0758        65  400060  1253803156

废话不多说,直接上处理代码:

import pandas as pd def data_precess():"""对原始数据进行处理:return: None"""# 导入数据data = pd.read_csv("./ins/train.csv/train.csv")# 筛选数据中的准确率data = data.query("50<accuracy").copy()# 对时间戳进行处理,将时间戳转化为年--日 时::秒的格式time_value = pd.to_datetime(data["time"], unit="s")# 在原始表格中加入一列time_valuedata["time_value"] = time_value# 提取小时,日,周的信息data["hour"] = time_value.dt.hourdata["day"] = time_value.dt.daydata["weekday"] = time_value.dt.weekday# 删除原始的时间戳一列data = data.drop(["time"], axis=1)print(data.head(10))return None

最终的结果为:

row_id       x       y  accuracy  ...          time_value hour  day  weekday
0        0  0.7941  9.0809        54  ... 1970-01-06 10:45:02   10    6        1
2        2  8.3078  7.0407        74  ... 1970-01-04 17:37:28   17    4        6
3        3  7.3665  2.5165        65  ... 1970-01-09 03:43:07    3    9        4
5        5  3.8099  1.9586        75  ... 1970-01-03 01:27:45    1    3        5
7        7  5.7409  6.7697        85  ... 1970-01-05 06:30:02    6    5        0
9        9  6.3414  0.0758        65  ... 1970-01-05 15:07:40   15    5        0
11      11  8.7101  2.9442        73  ... 1970-01-02 18:38:13   18    2        4
12      12  0.8829  1.3445        64  ... 1970-01-07 15:34:48   15    7        2
13      13  2.4336  8.0600        62  ... 1970-01-03 18:07:34   18    3        5
15      15  7.6219  9.6208        65  ... 1970-01-04 17:18:39   17    4        6

这样就实现了对时间戳的信息提取,在对原始数据进行特征提取时,我们一定要注意在对原先的数据帧先进行切片或者索引,然后赋值,是一定要先将数据进行copy(l例如上述代码中的data = data.query(“50<accuracy”).copy()),否则会出现SettingWithCopyWarning。
还有一种情况:
我们先查找aca_1这里列中数值为3样本,将样本特征中的cac_2赋值为1。如果运行如下代码则会报出警告
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

d[d['aca_1'] == 3]['cac_2'] = 1

这时我们就需要使用LOC或者ILOC

d.loc[d['col_1'] == 0, 'col_2'] = 1

这样警告就会没有啦!

  相关解决方案