我有一个14MB的Excel文件和五个工作表我正在阅读Pandas数据帧,虽然下面的代码有效,但需要9分钟!
有没有人有加快速度的建议?
import pandas as pd
def OTT_read(xl,site_name):
df = pd.read_excel(xl.io,site_name,skiprows=2,parse_dates=0,index_col=0,
usecols=[0,1,2],header=None,
names=['date_time','%s_depth'%site_name,'%s_temp'%site_name])
return df
def make_OTT_df(FILEDIR,OTT_FILE):
xl = pd.ExcelFile(FILEDIR + OTT_FILE)
site_names = xl.sheet_names
df_list = [OTT_read(xl,site_name) for site_name in site_names]
return site_names,df_list
FILEDIR='c:/downloads/'
OTT_FILE='OTT_Data_All_stations.xlsx'
site_names_OTT,df_list_OTT = make_OTT_df(FILEDIR,OTT_FILE)
Run Code Online (Sandbox Code Playgroud) 我想使用特定日期(或月份)作为第一个 bin 的边缘对 Pandas 对象重新采样。例如,在下面的代码片段中,我希望我的第一个索引值是2020-02-29
,我很乐意指定start=2
or start="2020-02-29"
。
>>> dates = pd.date_range("2020-01-29", "2021-07-04")
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M').count()
2020-01-31 3
2020-05-31 121
2020-09-30 122
2021-01-31 123
2021-05-31 120
2021-09-30 34
Freq: 4M, dtype: int64
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我能想到的最干净的用途,pd.cut
并且groupby
:
>>> rule = "4M"
>>> start = pd.Timestamp("2020-02-29") - pd.tseries.frequencies.to_offset(rule)
>>> end = s.index.max() + pd.tseries.frequencies.to_offset(rule)
>>> bins = pd.date_range(start, end, freq=rule)
>>> gb = s.groupby(pd.cut(s.index, bins)).count()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29 32
2020-06-30 …
Run Code Online (Sandbox Code Playgroud) 我有一个pandas.DataFrame对象,包含大约100列和200000行数据.我试图将其转换为bool数据帧,其中True表示该值大于阈值,False表示它更小,并且保持NaN值.
如果没有NaN值,我运行大约需要60毫秒:
df >= threshold
Run Code Online (Sandbox Code Playgroud)
但是当我尝试处理NaN时,下面的方法有效,但速度非常慢(20秒).
def func(x):
if x >= threshold:
return True
elif x < threshold:
return False
else:
return x
df.apply(lambda x: x.apply(lambda x: func(x)))
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?
我一直在努力创造一个阴影浮雕来衬托我的地图.这个srtm_shading示例从新区域下载数据非常慢.有没有办法使用阴影浮雕图像代替?
这个图像拼贴似乎很有希望,但我无法弄清楚如何在灰度而不是地形中获得阴影浮雕.