swo*_*nep 2 python csv processing-efficiency python-3.x pandas
我有一个约有300,000行的.csv文件。我已将其设置为按特定列分组,每个组大约有140个成员(总共2138个组)。
我正在尝试生成组名称的一个numpy数组。到目前为止,我已经使用了for循环来生成名称,但是处理所有内容都需要一段时间。
import numpy as np
import pandas as pd
df = pd.read_csv('file.csv')
grouped = df.groupby('col1')
group_names = []
for name,group in grouped: group_names.append(name)
group_names = np.array(group_names, dtype=object)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更有效的方法,无论是通过使用pandas模块还是将名称直接转换为numpy数组。
最快的方法很可能只是unique在您分组的列上使用,它为您提供所有唯一值。输出将是您的组名数组。
group_names = df.col1.unique()
Run Code Online (Sandbox Code Playgroud)
groupby对象具有.groups属性:
groups = df.groupby('col1').groups
Run Code Online (Sandbox Code Playgroud)
这将返回组名称->标签的字典
例:
In[257]:
df = pd.DataFrame({'a':list('aabcccc'), 'b':np.random.randn(7)})
groups = df.groupby('a').groups
groups
Out[257]:
{'a': Int64Index([0, 1], dtype='int64'),
'b': Int64Index([2], dtype='int64'),
'c': Int64Index([3, 4, 5, 6], dtype='int64')}
groups.keys()
Out[258]: dict_keys(['a', 'b', 'c'])
Run Code Online (Sandbox Code Playgroud)