相关疑难解决方法(0)

Pandas HDFStore从内存中卸载数据帧

好吧我正在尝试使用pandas来加载30GB +行和150+列的30GB csv文件到HDFStore.大多数列都是字符串,后跟数字和日期.

我之前从未真正使用过numpy,pandas或pytables,但是在R中使用过数据帧.

我目前只是将大约20000行的样本文件存储到HDFStore中.当我尝试从HDFStore读取表时,表被加载到内存,内存使用量增加了~100MB

f=HDFStore('myfile.h5')
g=f['df']
Run Code Online (Sandbox Code Playgroud)

然后我删除包含DataFrame的变量:

del g
Run Code Online (Sandbox Code Playgroud)

此时内存使用量减少约5MB

如果我再次将数据加载到g中g=f['df'],则内存使用量会再增加100MB

清理仅在我实际关闭窗口时发生.

数据的组织方式,我可能会将数据划分为单个表,最大表大小约为1GB,可以放入内存,然后一次使用一个.但是,如果我无法清除内存,这种方法将无效.

有关如何实现这一目标的任何想法?

python hdf5 pytables pandas hdfstore

5
推荐指数
1
解决办法
5212
查看次数

使用awk管道数据将datetime转换为epoch

我有一个制表符分隔的日志文件,其前两列中的日期时间格式为"2011-07-20 11:34:52":

日志文件中的示例行是:

2011-07-20  11:34:15    LHR3    1488    111.111.111.111 GET djq2eo454b45f.cloudfront.net    /1010.gif   200 -   Mozilla/5.0%20(Windows%20NT%206.1;%20rv:5.0)%20Gecko/20100101%20Firefox/5.0 T=F&Event=SD&MID=67&AID=dc37bcff-70ec-419a-ad43-b92d6092c9a2&VID=8&ACID=36&ENV=demo-2&E=&P=Carousel&C=3&V=3
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用awk将日期时间转换为纪元:

cat logfile.log | grep 1010.gif | \
awk '{ print $1" "$2" UTC|"$5"|"$10"|"$11"|"$12 }' | \
awk 'BEGIN {FS="|"};{system ("date -d \""$1"\" +%s" ) | getline myvar}'
Run Code Online (Sandbox Code Playgroud)

所以这让我有了一些方法,因为它让我的时代少了三千个 - 但是我只是得到了系统命令的输出 - 我真的想用纪元时间替换1美元.

我的目标是以下输出:

<epoch time>|$5|$10|$11|$12
Run Code Online (Sandbox Code Playgroud)

我尝试过只使用:

cat logfile.log | grep 1010.gif |  awk '{ print d };'  "d=$(date +%s -d"$1")"
Run Code Online (Sandbox Code Playgroud)

但这只是给我空行.

有什么想法吗.

谢谢

awk date

2
推荐指数
1
解决办法
5077
查看次数

标签 统计

awk ×1

date ×1

hdf5 ×1

hdfstore ×1

pandas ×1

pytables ×1

python ×1