小编jsi*_*ell的帖子

更快速地将Excel文件读取到pandas数据帧

我有一个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)

python import-from-excel pandas

23
推荐指数
4
解决办法
3万
查看次数

熊猫重新采样开始日期

我想使用特定日期(或月份)作为第一个 bin 的边缘对 Pandas 对象重新采样。例如,在下面的代码片段中,我希望我的第一个索引值是2020-02-29,我很乐意指定start=2or 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)

python time-series dataframe pandas pandas-resample

20
推荐指数
2
解决办法
2012
查看次数

保持NaNs与pandas数据帧不等式

我有一个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)

有更快的方法吗?

python pandas

8
推荐指数
1
解决办法
1095
查看次数

檐篷遮挡浮雕

我一直在努力创造一个阴影浮雕来衬托我的地图.这个srtm_shading示例从新区域下载数据非常慢.有没有办法使用阴影浮雕图像代替?

这个图像拼贴似乎很有希望,但我无法弄清楚如何在灰度而不是地形中获得阴影浮雕.

python gis matplotlib cartopy

4
推荐指数
1
解决办法
934
查看次数