如何在熊猫列后期操作中保持前导零?

Posted

技术标签:

【中文标题】如何在熊猫列后期操作中保持前导零?【英文标题】:How to keep leading zeroes from a panda column post operation? 【发布时间】:2022-01-01 12:14:13 【问题描述】:

我有一列的数据为:

Date
'2021-01-01'
'2021-01-10'
'2021-01-09'
'2021-01-11'

我只需要将“年和月”作为一列并将其作为整数而不是像“2021-01-01”这样的字符串保存为 202101。(我不需要日部分) .

当我尝试清理数据时,我可以这样做,但它会删除前导零。

df['period'] = df['Date'].str[:4] + df['Date'].str[6:7]

这给了我:

Date
20211
202110
20219
202111

如您所见,从 1 月到 9 月,它只返回 1 到 9 而不是 01 到 09,这会产生差异。如果我在合并过程中手动添加一个零,它将使“2021-10”成为 2021010。我希望它只是没有连字符的年份和月份,并将前导零保留几个月。请参阅下面我希望它如何出现在新列中。

Date
202101
202110
202109
202111

我可以使用循环来做到这一点,但效率不高。有没有更好的方法在 python 中做到这一点?

【问题讨论】:

【参考方案1】:

去除反逗号,将日期强制转换为所需格式的日期时间并将其转换为整数。代码如下

df['Date_edited']=pd.to_datetime(df['Date'].str.strip("''")).dt.strftime('%Y%m').astype(int)



      Date         Date_edited
0  '2021-01-01'       202101
1  '2021-01-10'       202101
2  '2021-01-09'       202101
3  '2021-01-11'       202101

【讨论】:

【参考方案2】:

由于对 Python 中 slice notation 的使用存在误解,因此删除了前导零。

尝试将您的代码更改为:

df['period'] = df['Date'].str[:4] + df['Date'].str[5:7]

注意从 [6:7] 到 [5:7] 的变化。

【讨论】:

以上是关于如何在熊猫列后期操作中保持前导零?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确读取带有日期的csv并在熊猫中省略前导零?

在C中保持前导零[重复]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

如何在熊猫列中找到连续零的最大计数?

为啥熊猫在写入 csv 时会删除前导零?