小编jef*_*ott的帖子

使用Pandas写入时,为什么CSV文件小于HDF5文件?

import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.zeros((1000000,1)))
df.to_csv('test.csv')
df.to_hdf('test.h5', 'df')

ls -sh test*
11M test.csv  16M test.h5
Run Code Online (Sandbox Code Playgroud)

如果我使用更大的数据集,那么效果会更大.使用HDFStore类似下面的内容不会改变任

store = pd.HDFStore('test.h5', table=True)
store['df'] = np.zeros((1000000,1))
store.close()
Run Code Online (Sandbox Code Playgroud)

编辑:没关系.这个例子很糟糕!使用一些非平凡的数字而不是零来改变故事.

from numpy.random import rand
import pandas as pd

df = pd.DataFrame(data=rand(10000000,1))
df.to_csv('test.csv')
df.to_hdf('test.h5', 'df')

ls -sh test*
260M test.csv  153M test.h5
Run Code Online (Sandbox Code Playgroud)

将数字表示为浮点数应该比将其表示为每个数字一个字符的字符串少占用字节数.这通常是正确的,除了我的第一个例子,其中所有数字都是'0.0'.因此,表示数字所需的字符不多,因此字符串表示小于浮点表示.

python csv hdf5 pandas hdf

5
推荐指数
2
解决办法
1665
查看次数

巨型组件中节点的身份,在igraph中使用Python

我正在尝试标记哪些节点位于网络的巨大组件中,哪些节点不在网络中.我并不想简单地抓住巨大的组件.这是我到目前为止:

def in_giant(G):
    giant = G.components().giant().vs["name"]
    return map(lambda x: x in giant, G.vs["name"])
Run Code Online (Sandbox Code Playgroud)

这很慢.我怀疑通过G.components()直接操作结构可以做到快速的事情.有任何想法吗?

python igraph

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

需要速度:慢速嵌套的群组并在熊猫中应用

我正在对DataFrame执行复杂的转换.我认为Pandas会很快,但我设法做到的唯一方法是使用一些嵌套的groupbys和apply,使用lambda函数,它很慢.看起来应该有内置的,更快的方法.在n_rows = 1000时它是2秒,但我将做10 ^ 7行,所以这太慢了.很难解释我们正在做什么,所以这里是代码和配置文件,然后我将解释:

n_rows = 1000

d = pd.DataFrame(randint(1,10,(n_rows,8))) #Raw data
dgs = array([3,4,1,8,9,2,3,7,10,8]) #Values we will look up, referenced by index
grps = pd.cut(randint(1,5,n_rows),arange(1,5)) #Grouping

f = lambda x: dgs[x.index].mean() #Works on a grouped Series
g = lambda x: x.groupby(x).apply(f) #Works on a Series
h = lambda x: x.apply(g,axis=1).mean(axis=0) #Works on a grouped DataFrame

q = d.groupby(grps).apply(h) #Slow



824984 function calls (816675 primitive calls) in 1.850 seconds
Ordered by: internal time
ncalls  tottime  percall  cumtime  percall filename:lineno(function) …
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
2894
查看次数

熊猫tshift成群慢

使用熊猫tshift非常棒.这很快!

df = pd.DataFrame(index=pd.date_range(pd.datetime(1970,1,1),pd.datetime(1970,2,1)))
df['data']=.5
%timeit df.sum()
#10000 loops, best of 3: 162 µs per loop 
%timeit df.tshift(-1)
#1000 loops, best of 3: 307 µs per loop #x2 slower
Run Code Online (Sandbox Code Playgroud)

但是当我做了tshift之后groupby它会减速很多:

df = pd.DataFrame(index=pd.date_range(pd.datetime(1970,1,1),pd.datetime(1970,2,1)))
df['data']=.5
df['A'] = randint(0,2,len(df.index))
%timeit df.groupby('A').sum()
#100 loops, best of 3: 2.72 ms per loop
%timeit df.groupby('A').tshift(-1)
#10 loops, best of 3: 16 ms per loop #x6 slower!
Run Code Online (Sandbox Code Playgroud)

为什么tshift在进行分组时要慢得多?有没有办法更快?

更新:

我的实际用例更接近下面的代码.我看到减速乘数的大小取决于组的数量.

n_A = 50
n_B = 5
index = …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

标签 统计

python ×4

pandas ×3

csv ×1

hdf ×1

hdf5 ×1

igraph ×1