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
这样警告就会没有啦!