- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 xarray 读取一个相当小的 NetCDF 文件 (5.4MB),并想将其转换为 Pandas 数据框:
import xarray as xr
f = xr.open_dataset('file.nc')
到目前为止,Python 使用的内存非常少(~75 MB),但是一旦我调用:
f2 = f.to_dataframe()
内存使用量激增 (>12 GB)。有谁知道为什么会这样?我尝试使用 to_dask_dataframe()
,但这会导致我在 NetCDF 文件中的某些数据类型上出错。
我上传了 NetCDF 文件 here ,由于我无法分发原始数据,因此将原始数据替换为随机数。
根据评论中的要求:
In [3]: f
Out[3]:
<xarray.Dataset>
Dimensions: (day_in_time_interval: 3652, nv: 2, time: 175296)
Coordinates:
* time (time) datetime64[ns] 2001-01-01 2001-01-01T00:30:00 ...
Dimensions without coordinates: day_in_time_interval, nv
Data variables:
iso_dataset |S1 ...
product |S1 ...
station_details |S1 ...
date (time) int32 ...
valid_dates (day_in_time_interval) int8 ...
time_bnds (time, nv) float32 ...
C020 (time) float32 ...
C060 (time) float32 ...
C120 (time) float32 ...
C200 (time) float32 ...
Attributes:
institution: Royal Netherlands Meteorological Institute (KNMI)
comment: none
Conventions: CF-1.4
location: CESAR observatory, the Netherlands
file_creation_date_time: 20161130 09:34:56 (UTC)
和原始文件的ncdump
:
netcdf ecnco2 {
dimensions:
time = UNLIMITED ; // (175296 currently)
nv = 2 ;
day_in_time_interval = 3652 ;
variables:
char iso_dataset ;
iso_dataset:hierarchyLevel = "dataset" ;
iso_dataset:url = "http://www.cesar-database.nl" ;
iso_dataset:protocol = "website" ;
iso_dataset:topic = "climatologyMeteorologyAtmosphere" ;
iso_dataset:westbound_longitude = "4.926" ;
iso_dataset:eastbound_longitude = "4.926" ;
iso_dataset:southbound_latitude = "51.97" ;
iso_dataset:northbound_latitude = "51.97" ;
iso_dataset:datasetDateType = "publication" ;
iso_dataset:code = "28992" ;
iso_dataset:codeSpace = "EPSG" ;
iso_dataset:accessConstraints = "CESAR data policy" ;
iso_dataset:useLimitation = "None" ;
iso_dataset:organisationName_dataset = "Royal Netherlands Meteorological Institute (KNMI)" ;
iso_dataset:email_dataset = "fred.bosveld@knmi.nl" ;
iso_dataset:role_dataset = "Principle Investigator" ;
iso_dataset:organisationName_metadata = "Royal Netherlands Meteorological Institute (KNMI)" ;
iso_dataset:role_metadata = "Principle Investigator" ;
iso_dataset:email_metadata = "fred.bosveld@knmi.nl" ;
iso_dataset:url_metadata = "http://www.knmi.nl/~bosveld" ;
iso_dataset:metadataDateType = "creation" ;
iso_dataset:language = "eng" ;
iso_dataset:metadataStandardName = "ISO-19115" ;
iso_dataset:metadataStandardNameVersion = "Nederlands profiel op ISO 19115 voor geografie, v1.2" ;
char product ;
product:format_version = "netCDF,3.6" ;
product:originator = "Bosveld, F.C., KNMI" ;
product:software_version = "see http://www.knmi.nl/~bosveld -> software -> Mobibase" ;
product:command_line = " ncselect.x ecnco2 a30 [M]cesar,[o]ecnco2 2001,2010 -fecnco2.nc" ;
product:date_start_of_data = "2001-01-01T00:00Z" ;
product:date_end_of_data = "2010-12-31T23:59Z" ;
product:revision_date = "2016-11-30" ;
char station_details ;
station_details:name = "CESAR observatory" ;
station_details:latitude = "51.97" ;
station_details:longitude = "4.926" ;
station_details:elevation = "-0.7" ;
station_details:WMO_id = "06348" ;
station_details:address = "Zijdeweg 1" ;
station_details:postal_code = "3411 MH" ;
station_details:city = "Lopik" ;
station_details:administration_area = "Utrecht" ;
station_details:country = "the Netherlands" ;
float time(time) ;
time:units = "hours since 2001-01-01 00:00:00 0:00" ;
time:long_name = "hours since 2001-01-01 00:00:00 (UTC)" ;
time:standard_name = "time" ;
time:axis = "T" ;
time:bounds = "time_bnds" ;
int date(time) ;
date:long_name = "yyyymmdd" ;
byte valid_dates(day_in_time_interval) ;
valid_dates:comment = "indicates whether any data are included for a particular day: 0=none, 1=data, index runs from date indicated by \"units\" attribute of the time variable" ;
float time_bnds(time, nv) ;
float C020(time) ;
C020:units = "ppm" ;
C020:long_name = "CO2 concentration ECN at 20 m" ;
C020:_FillValue = -9999.f ;
C020:cell_methods = "time: mean" ;
float C060(time) ;
C060:units = "ppm" ;
C060:long_name = "CO2 concentration ECN at 60 m" ;
C060:_FillValue = -9999.f ;
C060:cell_methods = "time: mean" ;
float C120(time) ;
C120:units = "ppm" ;
C120:long_name = "CO2 concentration ECN at 120 m" ;
C120:_FillValue = -9999.f ;
C120:cell_methods = "time: mean" ;
float C200(time) ;
C200:units = "ppm" ;
C200:long_name = "CO2 concentration ECN at 200 m" ;
C200:_FillValue = -9999.f ;
C200:cell_methods = "time: mean" ;
// global attributes:
:institution = "Royal Netherlands Meteorological Institute (KNMI)" ;
:comment = "none" ;
:Conventions = "CF-1.4" ;
:location = "CESAR observatory, the Netherlands" ;
:file_creation_date_time = "20161130 09:34:56 (UTC)" ;
:_Format = "classic" ;
}
最佳答案
发生这种情况是因为您的数据集具有多个维度,并且要在一个数据框中表示所有这些,必须进行大量广播。为了说明,让我们减小数据集的大小:
In [8]: ds_small = ds.isel(time=slice(0, 4), day_in_time_interval=slice(0, 2))
In [9]: ds_small
Out[9]:
<xarray.Dataset>
Dimensions: (day_in_time_interval: 2, nv: 2, time: 4)
Coordinates:
* time (time) datetime64[ns] 2001-01-01 2001-01-01T00:30:00 ...
Dimensions without coordinates: day_in_time_interval, nv
Data variables:
iso_dataset |S1 ...
product |S1 ...
station_details |S1 ...
date (time) int32 ...
valid_dates (day_in_time_interval) int8 ...
time_bnds (time, nv) float32 ...
C020 (time) float32 ...
C060 (time) float32 ...
C120 (time) float32 ...
C200 (time) float32 ...
Attributes:
institution: Royal Netherlands Meteorological Institute (KNMI)
comment: none
Conventions: CF-1.4
location: CESAR observatory, the Netherlands
file_creation_date_time: 20161130 09:34:56 (UTC)
In [10]: ds_small.to_dataframe()
Out[10]:
iso_dataset product station_details date valid_dates time_bnds C020 C060 C120 C200
day_in_time_interval nv time
0 0 2001-01-01 00:00:00 b'' b'' b'' 20010101 0 0.0 0.749853 0.311870 0.644066 0.231409
2001-01-01 00:30:00 b'' b'' b'' 20010101 0 0.5 0.758620 0.948448 0.089245 0.632072
2001-01-01 01:00:00 b'' b'' b'' 20010101 0 1.0 0.649947 0.542748 0.422275 0.555378
2001-01-01 01:30:00 b'' b'' b'' 20010101 0 1.5 0.972251 0.766816 0.180199 0.441256
1 2001-01-01 00:00:00 b'' b'' b'' 20010101 0 0.5 0.749853 0.311870 0.644066 0.231409
2001-01-01 00:30:00 b'' b'' b'' 20010101 0 1.0 0.758620 0.948448 0.089245 0.632072
2001-01-01 01:00:00 b'' b'' b'' 20010101 0 1.5 0.649947 0.542748 0.422275 0.555378
2001-01-01 01:30:00 b'' b'' b'' 20010101 0 2.0 0.972251 0.766816 0.180199 0.441256
1 0 2001-01-01 00:00:00 b'' b'' b'' 20010101 0 0.0 0.749853 0.311870 0.644066 0.231409
2001-01-01 00:30:00 b'' b'' b'' 20010101 0 0.5 0.758620 0.948448 0.089245 0.632072
2001-01-01 01:00:00 b'' b'' b'' 20010101 0 1.0 0.649947 0.542748 0.422275 0.555378
2001-01-01 01:30:00 b'' b'' b'' 20010101 0 1.5 0.972251 0.766816 0.180199 0.441256
1 2001-01-01 00:00:00 b'' b'' b'' 20010101 0 0.5 0.749853 0.311870 0.644066 0.231409
2001-01-01 00:30:00 b'' b'' b'' 20010101 0 1.0 0.758620 0.948448 0.089245 0.632072
2001-01-01 01:00:00 b'' b'' b'' 20010101 0 1.5 0.649947 0.542748 0.422275 0.555378
2001-01-01 01:30:00 b'' b'' b'' 20010101 0 2.0 0.972251 0.766816 0.180199 0.441256
因此,在我的示例中,您的 3 维数据集最终会生成长度等于维度乘积 (4*2*2) 的 3 级 MultiIndex。
您可能想要通过删除一些虚假变量/维度来稍微清理您的数据集。以下行适用于您共享的小型或完整数据集:
In [14]: ds[['C020', 'C060', 'C120', 'C200']].to_dataframe().head()
Out[14]:
C020 C060 C120 C200
time
2001-01-01 00:00:00 0.749853 0.311870 0.644066 0.231409
2001-01-01 00:30:00 0.758620 0.948448 0.089245 0.632072
2001-01-01 01:00:00 0.649947 0.542748 0.422275 0.555378
2001-01-01 01:30:00 0.972251 0.766816 0.180199 0.441256
2001-01-01 02:00:00 0.302412 0.389957 0.702632 0.497293
关于python - 内存使用过多 xarray `to_dataframe()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650006/
我在 JBoss 6 上使用 JSF 2。我制作了一个示例应用程序,它使用 JSF 作为 View ,使用 EJB 作为逻辑,使用 JPA 作为持久性。 JSF 中的 bean 具有 RequestS
我打开气流并检查了连接,然后发现背后有太多连接。 关于如何杀死那些我不使用的想法,或者我很想知道运行它的最低conn_id的任何想法。 建筑 LocalExecutor(与其他经纪人不同) Postg
我收到错误 style.css:1 GET https://www.example.com/cs_CZ净::ERR_TOO_MANY_REDIRECTS 可能与我的 htaccess 有关吗? Rew
我收到错误 style.css:1 GET https://www.example.com/cs_CZ净::ERR_TOO_MANY_REDIRECTS 可能与我的 htaccess 有关吗? Rew
我正在 Android 中开发一个应用程序,我有以下 XML 布局:
我有 5 个类用作运算符: TurnOn , TurnOff , PushBox , Exit , Enter 对于每种类型,我都有一个包含该类型描述的字符串。 例如: class Places {
我们在使用 lettuce redis 库时遇到了这个具体问题。我们收到太多 RedisCommandTimeoutException。我们在 redis-cli 中设置了 2 秒的超时,在 redi
在 Controller 类文件中,大多数方法函数都包含try/catch块,如下所示: try { $stmt = $this->prepare($sql); $st
我读到这个page附加很多元素是不好的做法,我应该在循环的每次迭代期间构建一个字符串,然后将 DOM 元素的 HTML 设置为该字符串。在循环中使用过多的 HTML 是否也是如此? 我有一个解析 JS
在我的应用程序日志上运行 logcat 时,我看到很多 GC_FOR_ALLOC 而没有 GC_CONCURRENT 消息。我知道我有内存泄漏,但在堆栈和其他站点的任何地方,logcat 消息都有很多
当我检查我的 Tomcat 应用程序管理器时,我发现我的 session 太多(超过 4600): 为什么会这样?这可以链接到已部署的应用程序,还是它已经运行了很长时间? 最佳答案 这可能有多种原因,
所以我试图在一个 div 中运行 3 个 float ,但我遇到了这个问题。 http://jsfiddle.net/sPUjQ/101/ 点我 每当我运行两次 float 时,背景颜色会保持不变,但
为什么在使用 http_build_query 函数构建查询字符串时,它会将方括号 [] urlencode 到值之外,如何摆脱它? $query = array("var" => array("fo
在一个过程中,我需要使用许多 if-else 条件来决定列的值。该脚本以 FOR rec IN (SELECT....) LOOP Begin 并决定许多不同的值 rec 子记录可以在每次迭代中获得。
我们基于 Java 的服务器应用程序报告异常长的类加载时间: # jstat -class 10625 1000 Loaded Bytes Unloaded Bytes Time 4
我正在使用 Kraken.js 开发一个应用程序并管理我决定使用的 session :connect-mongo。 我有这样的设置: 'use strict'; var session = requi
我在 iPad 应用程序中有 180 个 UILabels(UITableViewCells 的 subview ),每个 UILabel 的宽度为 155 X 155,并且每个包含大量 Unicod
所以基本上,如果我将 JPanel 放入使用 GridBagLayout 的 JPanel 中,并使用 setPreferredSize 限制大小>,最终它达到了无法容纳所有这些的地步,并且它表现出附
我目前使用的是 Play 2.2.1,在白天运行生产 Web 应用程序后,我的日志中开始出现以下错误。似乎我的连接已用完/我一定没有正确关闭某些东西,但我似乎无法弄清楚它是什么。 2014-02-11
所以我几乎完成了我的元素,我打算创建一个完整的网页 slider 作为我网站的背景主题,并且它运行完美! 问题是它的垂直拉伸(stretch)太长,您可以向右滚动(您不应该那样做)而且我不知道为什么它
我是一名优秀的程序员,十分优秀!