python-3.x - 熊猫数据框中的月份和日期搞砸了
问题描述
我有一种情况,我的数据框中的几个日期的月份和日期都搞砸了。例如,这里是输入:
df['work_date'].head(15)
0 2018-01-01
1 2018-02-01
2 2018-03-01
3 2018-04-01
4 2018-05-01
5 2018-06-01
6 2018-07-01
7 2018-08-01
8 2018-09-01
9 2018-10-01
10 2018-11-01
11 2018-12-01
12 2018-01-13
13 2018-01-14
14 2018-01-15
日期存储为string
. 如您所见,日期格式yyyy-dd-mm
为 1 月 12 日,然后变为yyyy-mm-dd
. 数据框由 3 年的数据组成,并且这种模式在所有年份的所有月份重复。
我的预期输出是将日期标准化为dddd-mm-yy
如下格式。
0 2018-01-01
1 2018-01-02
2 2018-01-03
3 2018-01-04
4 2018-01-05
5 2018-01-06
6 2018-01-07
7 2018-01-08
8 2018-01-09
9 2018-01-10
10 2018-01-11
11 2018-01-12
12 2018-01-13
13 2018-01-14
14 2018-01-15
下面是我编写的代码,它完成了工作。基本上,我拆分日期字符串并进行一些字符串操作。但是,如您所见,它不太漂亮。我正在检查是否有其他优雅的解决方案,而不是执行df.apply
和loops
.
def func(x):
d = x.split('-')
print(d)
if (int(d[1]) <= 12) & (int(d[2]) <= 12) :
d = [d[0],d[2],d[1]]
x = '-'.join(d)
return x
else:
return x
df['work_date'] = df['work_date'].apply(lambda x:func(x))
解决方案
您可以根据以下事实更新该列,即它是有序的,并且只有一个日期,并且一年中的所有日子都连续包含在内:
df['Date'] = pd.date_range(df['work_date'].min(), '2018-01-12', freq='1D')
# you can specify df['work_date'].min() OR df['work_date'].max) OR A STRING. It really depends on what format your minimum and your maximum is
df
Out[1]:
work_date date
0 2018-01-01 2018-01-01
1 2018-02-01 2018-01-02
2 2018-03-01 2018-01-03
3 2018-04-01 2018-01-04
4 2018-05-01 2018-01-05
5 2018-06-01 2018-01-06
6 2018-07-01 2018-01-07
7 2018-08-01 2018-01-08
8 2018-09-01 2018-01-09
9 2018-10-01 2018-01-10
10 2018-11-01 2018-01-11
11 2018-12-01 2018-01-12
12 2018-01-13 2018-01-13
13 2018-01-14 2018-01-14
14 2018-01-15 2018-01-15
为了使这更加动态,您还可以执行一些try
/except
如下所示:
minn = df['work_date'].min()
maxx = df['work_date'].max()
try:
df['Date'] = pd.date_range(minn, maxx, freq='1D')
except ValueError:
s = maxx.split('-')
df['Date'] = pd.date_range(minn, f'{s[0]}-{s[2]}-{s[1]}', freq='1D')
except ValueError:
s = minn.split('-')
df['Date'] = pd.date_range(f'{s[0]}-{s[2]}-{s[1]}', maxx, freq='1D')
df
推荐阅读
- python - 4d 数组上的 view_as_windows
- html - 图像防止弹性项目拉伸到屏幕底部
- botframework - 英雄卡中未显示粗体文字
- c++ - 如何根据传递给函数的变量定义特征矩阵大小
- python - Python:使用自动 Y 缩放绘制烛台
- javascript - 这个脚本地理定位重定向缺少什么
- azure - OneDrive 上传的 MS Graph API 权限
- c# - 在 Bot 框架中选择 promptdialog.choice 选项时显示描述而不是 id
- java - Java 和 SQL - XADataSource
- bash - 设置命令的 bash 脚本变量导致找不到命令错误