Pandas 用a'中每行的最后两位数字(dd)处理;日期';(yyyymmdd)中的列

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

我试图处理一整列的日期值,以便在一个数据框中将其从“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     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)