Pandas 用a'中每行的最后两位数字(dd)处理;日期';(yyyymmdd)中的列
我试图处理一整列的日期值,以便在一个数据框中将其从“1”改为“每月的最后一天”。 代码必须能够处理值为28、29、30或31的列,具体取决于所涉及的月份。 因此,我的df:Pandas 用a'中每行的最后两位数字(dd)处理;日期';(yyyymmdd)中的列,pandas,Pandas,我试图处理一整列的日期值,以便在一个数据框中将其从“1”改为“每月的最后一天”。 代码必须能够处理值为28、29、30或31的列,具体取决于所涉及的月份。 因此,我的df: DAY TX TN 0 20190201 4.9 -0.6 1 20190202 2.7 0.0 2 20190203 4.6 -0.3 3 20190204 2.9 -0.5 4 20190205 6.2
DAY TX TN
0 20190201 4.9 -0.6
1 20190202 2.7 0.0
2 20190203 4.6 -0.3
3 20190204 2.9 -0.5
4 20190205 6.2 1.3
5 20190206 7.5 2.4
6 20190207 8.6 4.6
7 20190208 8.6 5.0
8 20190209 9.2 6.7
9 20190210 9.1 3.8
10 20190211 6.9 0.7
11 20190212 7.0 -0.5
12 20190213 7.8 -0.5
13 20190214 13.4 0.0
14 20190215 16.4 2.0
15 20190216 14.8 2.0
16 20190217 15.7 1.2
17 20190218 15.4 1.2
18 20190219 9.8 4.3
19 20190220 11.1 2.8
20 20190221 13.1 5.8
21 20190222 10.7 4.1
22 20190223 12.9 1.5
23 20190224 14.5 1.2
24 20190225 16.1 2.2
25 20190226 17.2 0.3
26 20190227 19.3 1.1
27 20190228 11.3 5.1
应该成为
DAY TX TN
0 1 4.9 -0.6
1 2 2.7 0.0
2 3 4.6 -0.3
3 4 2.9 -0.5
4 5 6.2 1.3
5 6 7.5 2.4
6 7 8.6 4.6
7 8 8.6 5.0
8 9 9.2 6.7
9 10 9.1 3.8
10 11 6.9 0.7
11 12 7.0 -0.5
12 13 7.8 -0.5
13 14 13.4 0.0
14 15 16.4 2.0
15 16 14.8 2.0
16 17 15.7 1.2
17 18 15.4 1.2
18 19 9.8 4.3
19 20 11.1 2.8
20 21 13.1 5.8
21 22 10.7 4.1
22 23 12.9 1.5
23 24 14.5 1.2
24 25 16.1 2.2
25 26 17.2 0.3
26 27 19.3 1.1
27 28 11.3 5.1
我必须处理此列的每个值,这样我还可以检查是否有天缺失,以及生成的数字是否适应我将提供的每个月df。
我在Pandas文档中搜索了一条有帮助的说明,但没有找到。
如果您有任何帮助,我们将不胜感激。请配合使用:
另一种解决方案是将值强制转换为字符串,通过索引获取最后2个整数并强制转换为整数:
df['DAY'] = df['DAY'].astype(str).str[-2:].astype(int)
您只需对列进行切片即可获得最后2位数字,并转换为
int
:
In[85]:
df['DAY'] = df['DAY'].str[-2:].astype(int)
df
Out[85]:
DAY TX TN
0 1 4.9 -0.6
1 2 2.7 0.0
2 3 4.6 -0.3
3 4 2.9 -0.5
4 5 6.2 1.3
5 6 7.5 2.4
6 7 8.6 4.6
7 8 8.6 5.0
8 9 9.2 6.7
9 10 9.1 3.8
10 11 6.9 0.7
11 12 7.0 -0.5
12 13 7.8 -0.5
13 14 13.4 0.0
14 15 16.4 2.0
15 16 14.8 2.0
16 17 15.7 1.2
17 18 15.4 1.2
18 19 9.8 4.3
19 20 11.1 2.8
20 21 13.1 5.8
21 22 10.7 4.1
22 23 12.9 1.5
23 24 14.5 1.2
24 25 16.1 2.2
25 26 17.2 0.3
26 27 19.3 1.1
27 28 11.3 5.1
如果dtype
已经是int
,那么您只需要先转换到str
:
df['DAY'] = df['DAY'].astype(str).str[-2:].astype(int)
使用
df['DAY']=pd.to_datetime(df['DAY'],格式='%Y%m%d').dt.DAY
df['DAY'].astype(str).str[-2::].astype(int)
可能是必需的。。。从OP的样本看不清楚data@ChrisA-在我的回答中:)@ChrisA yes,trueyes'DAY'已经是整数(我的示例df没有正确写入此处)我如何才能在我的问题陈述中正确插入示例数据框,以便下次使用?我在这里用三元组手工写的,但肯定有更好的方法。你是说我的答案不起作用吗?如果“DAY”已经是int,则应为
In[85]:
df['DAY'] = df['DAY'].str[-2:].astype(int)
df
Out[85]:
DAY TX TN
0 1 4.9 -0.6
1 2 2.7 0.0
2 3 4.6 -0.3
3 4 2.9 -0.5
4 5 6.2 1.3
5 6 7.5 2.4
6 7 8.6 4.6
7 8 8.6 5.0
8 9 9.2 6.7
9 10 9.1 3.8
10 11 6.9 0.7
11 12 7.0 -0.5
12 13 7.8 -0.5
13 14 13.4 0.0
14 15 16.4 2.0
15 16 14.8 2.0
16 17 15.7 1.2
17 18 15.4 1.2
18 19 9.8 4.3
19 20 11.1 2.8
20 21 13.1 5.8
21 22 10.7 4.1
22 23 12.9 1.5
23 24 14.5 1.2
24 25 16.1 2.2
25 26 17.2 0.3
26 27 19.3 1.1
27 28 11.3 5.1
df['DAY'] = df['DAY'].astype(str).str[-2:].astype(int)