www*_*www 2 python indexing performance datetime pandas
我有一个数据框,其中有一个时间列,其中的值是字符串。我想对数据帧进行子集化,以便只有窗口内的值才位于子集中。目前我正在使用
date_format = '%Y-%m-%d'
window_start = datetime.strptime('2000-01-01', date_format)
window_end = datetime.strptime('2010-12-31', date_format)
subs_df = pandas.DataFrame(index=np.arange(0, 0),
columns = list(orig_df.columns))
for i, row in orig_df.iterrows():
date = datetime.strptime(row.time, date_format)
f date >= window_start and date <= window_end:
subs_df = subs_df.append(row, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
这非常慢。我有一种感觉,我正在做一些根本错误的事情。这样做更好的方法是什么?
感谢您的时间。
是的,这会很慢。以下是一些提示:
for循环。您可以使用布尔索引,并且由于 Pandasdatetime系列在内部存储为整数,因此这利用了矢量化。datetime对象。使用pd.Timestamp对象代替。通常,字符串就足够了,因为这种转换发生在内部。pd.DataFrame.append循环使用。这是一项昂贵的操作,因为它涉及不必要的数据复制。以下是您可以执行的操作的示例:
# convert series to Pandas datetime
orig_df['time'] = pd.to_datetime(orig_df['time'])
# construct Boolean mask
mask = orig_df['time'].between('2000-01-01', '2010-12-31')
# apply Boolean mask
new_df = orig_df[mask]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |