【发布时间】: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 应该可以很好地处理负索引,正如我在评论中显示的那样