python - 获取csv中每个日期的最小和最大日期时间
问题描述
我对数据科学和 Python 有点陌生。
首先,在处理庞大的数据集(100K+ 行)时,您是否建议使用除 pandas 之外的任何其他库?
其次,让我向您揭示我当前的问题。
我有一个数据集,其中有一个 Datetime 列,为了便于理解,假设我只有一个名为的 Datetime 列date_col
。
这是我的date_col
价值观:
df=pd.DataFrame({'dt_col': ["2019-03-13 08:12:23", "2019-03-13 07:10:18", "2019-03-13 08:12:23", "2019-03-15 10:35:53", "2019-03-20 11:12:23", "2019-03-20 08:12:23"]})
dt_col
0 2019-03-13 08:12:23
1 2019-03-13 07:10:18
2 2019-03-13 08:12:23
3 2019-03-15 10:35:53
4 2019-03-20 11:12:23
5 2019-03-20 08:12:23
我想提取每天的最小和最大小时数,或者datetime
,例如2019-03-13
,我想提取2019-03-13 07:10:18
和2019-03-13 08:12:23
。
我坚持:
- 从我的 DataFrame 中获取没有时间的不同日期
- Foreach 这些日期,从我的数据框中获取最小和最大对应日期
我有点卡在第 2 步,因为我不知道如何在 Python 中真正实现这一点,我的意思是我可以通过一些循环以“旧方式”来做到这一点,但我认为它不会用大型数据集完成这项工作.
顺便说一句,这是我为第 1 步所做的:
dates=pd.to_datetime(df.dt_col)
distinc_dates=dates.dt.strftime("%Y-%m-%d").unique()
一旦我得到了这些最小值和最大值,我想在每个最小值和最大值日期时间之间生成日期时间行,例如在和之间2019-03-13 07:10:18
,我想得到2019-03-13 08:12:23
,,,,,,......直到。2019-03-13 07:10:18
2019-03-13 07:10:19
2019-03-13 07:10:20
2019-03-13 07:10:21
2019-03-13 07:10:22
2019-03-13 08:12:23
我认为这可以使用pd.date_range
. 所以一旦我得到了我的最小值和最大值,我想用户使用pd.date_tange
做这样的事情:
dates=[]
for index,row in df.iterrows():
dates.append(pd.date_range(start=row['min'], end=row['max'], freq='1S'))
print(dates)
但我知道 iterrows 很慢,所以我问你们在拥有庞大数据集时实现这一目标的最佳方法。
解决方案
如果dt_col
不是 dtype datetime
,则需要将其转换为 datetime
df.dt_col = pd.to_datetime(df.dt_col)
接下来试试这个
df1 = df.groupby(df.dt_col.dt.date).dt_col.agg(['min', 'max'])
Out[555]:
min max
dt_col
2019-03-13 2019-03-13 07:10:18 2019-03-13 08:12:23
2019-03-15 2019-03-15 10:35:53 2019-03-15 10:35:53
2019-03-20 2019-03-20 08:12:23 2019-03-20 11:12:23
在有最小值和最大值之后。pd.date_range
您可以通过或重新采样以秒为单位创建范围。我认为pd.date_range
在您的情况下,使用 listcomp 可能会更快地重新采样。这里是
time_arr = [pd.date_range(df1.loc[ix,'min'], df1.loc[ix,'max'], freq='S')
for ix in df1.index]
或者
time_arr = [pd.date_range(x[0], x[1], freq='S') for x in df1.values]
Out[640]:
[DatetimeIndex(['2019-03-13 07:10:18', '2019-03-13 07:10:19',
'2019-03-13 07:10:20', '2019-03-13 07:10:21',
'2019-03-13 07:10:22', '2019-03-13 07:10:23',
'2019-03-13 07:10:24', '2019-03-13 07:10:25',
'2019-03-13 07:10:26', '2019-03-13 07:10:27',
...
'2019-03-13 08:12:14', '2019-03-13 08:12:15',
'2019-03-13 08:12:16', '2019-03-13 08:12:17',
'2019-03-13 08:12:18', '2019-03-13 08:12:19',
'2019-03-13 08:12:20', '2019-03-13 08:12:21',
'2019-03-13 08:12:22', '2019-03-13 08:12:23'],
dtype='datetime64[ns]', length=3726, freq='S'),
DatetimeIndex(['2019-03-15 10:35:53'], dtype='datetime64[ns]', freq='S'),
DatetimeIndex(['2019-03-20 08:12:23', '2019-03-20 08:12:24',
'2019-03-20 08:12:25', '2019-03-20 08:12:26',
'2019-03-20 08:12:27', '2019-03-20 08:12:28',
'2019-03-20 08:12:29', '2019-03-20 08:12:30',
'2019-03-20 08:12:31', '2019-03-20 08:12:32',
...
'2019-03-20 11:12:14', '2019-03-20 11:12:15',
'2019-03-20 11:12:16', '2019-03-20 11:12:17',
'2019-03-20 11:12:18', '2019-03-20 11:12:19',
'2019-03-20 11:12:20', '2019-03-20 11:12:21',
'2019-03-20 11:12:22', '2019-03-20 11:12:23'],
dtype='datetime64[ns]', length=10801, freq='S')]
注意:如果您的数据集太大并且您按秒创建范围,您可能会耗尽内存并崩溃。
推荐阅读
- cursor - 在 Royalslider 插件中跟随光标的标题
- python - 为什么我在尝试制作箱形图时得到 ValueError?
- ubuntu - wine32 在 ubunt 20.04 中缺少问题,[[作为 root,请执行 "apt-get install wine32" wine-5.0 ]]
- java - 如果对象的方法之一在调用堆栈上,Java 中的垃圾收集器是否会删除该对象?
- java - 由于缺少谷歌应用 ID,构建失败
- android - 找不到正确的提供者
在此 MapSample 小部件上方 - ios - 提交 iOS 应用时 watchOS 应用出现问题
- reactjs - 无法从反应挂钩中的 public/images 文件夹中获取图像
- jquery - AdminLTE2 活动侧边栏仅在刷新后显示/更改
- excel - Excel宏给出循环引用错误