【问题标题】:Converting Three and Four Digit Integers to Dates将三位数和四位数整数转换为日期
【发布时间】:2019-09-06 19:10:02
【问题描述】:

我的数据框中有此列:

date
1026
1115
125
314

我想将它们转换为日期。月份范围从 10 月到 4 月(涵盖整个 NBA 赛季),因此 10 月、11 月和 12 月的年份与 1 月、2 月、3 月和 4 月不同。

首先,我尝试将它们从 int 转换为 str,然后运行此 for 循环以插入 / 并计划在另一个步骤中添加年份:

for i in range(0,len(nba_lines.index)):
    nba_lines.loc[i,'Date'] = nba_lines.loc[i,'Date'][:2] + '/' + nba_lines.loc[i,'Date'][2:]

它适用于四位数,1026 到 10/26,但是三位数中的 / 最终出现在错误的位置,314 到 31/4。

然后我尝试根据字符串的长度做一个if

    if len(nba_lines[i,'Date']) == 3:
        nba_lines.loc[i,'Date'] = nba_lines.loc[i,'Date'][:1] + '/' + nba_lines.loc[i,'Date'][1:]
    else:
        nba_lines.loc[i,'Date'] = nba_lines.loc[i,'Date'][:2] + '/' + nba_lines.loc[i,'Date'][2:]

但返回KeyError: (0, 'Date')。我尝试从 loc 更改为 iloc 并得到同样的错误。

有什么想法吗?

提前感谢您的帮助。

【问题讨论】:

  • 如果你有例如 125,你怎么知道是 12 月 5 日还是 1 月 25 日? 314 也一样 - 3 月 14 日或 4 月 31 日?
  • 10 月、11 月和 12 月 (1205) 是列中的四位数,而一月 (125)、二月、三月和四月是三位数。
  • 这是否意味着天总是 2 位数?在这种情况下,您可以将月份作为 d[:-2],将日期作为 d[-2:],其中 d 是转换为 str 的相应数字?
  • 是的,日期总是最后两位数。月份可以是一位数或两位数。
  • 在这种情况下,您的第一个 sn-p 应该可以很好地处理负索引,正如我在评论中显示的那样

标签: python date datetime


【解决方案1】:

鉴于当天的信息总是 2 位数字,而月份是 1 位或 2 位数字 - 第一个 sn-p 将按预期使用负索引

for i in range(0,len(nba_lines.index)):
    nba_lines.loc[i,'Date'] = nba_lines.loc[i,'Date'][:-2] + '/' + nba_lines.loc[i,'Date'][-2:]

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2015-07-27
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2011-01-02
    • 2021-06-13
    相关资源
    最近更新 更多