python中基于变量类型的数据处理子集

2024-04-26 14:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据,我存储在一个csv(df_示例.csv). 我在列表中列出了一个列。在

数据示例:

df_data_sample = pd.DataFrame({
                    'new_video':['BASE','SHIVER','PREFER','BASE+','BASE+','EVAL','EVAL','PREFER','ECON','EVAL'],
                    'ord_m1':[0,1,1,0,0,0,1,0,1,0],
                    'rev_m1':[0,0,25.26,0,0,9.91,'NA',0,0,0],
                    'equip_m1':[0,0,0,'NA',24.9,20,76.71,57.21,0,12.86],
                    'oev_m1':[3.75,8.81,9.95,9.8,0,0,'NA',10,56.79,30],
                    'irev_m1':['NA',19.95,0,0,4.95,0,0,29.95,'NA',13.95]
                    })

attribute_dict = {
        'new_video': 'CAT',
        'ord_m1':'NUM',
        'rev_m1':'NUM',
        'equip_m1':'NUM',
        'oev_m1':'NUM',
        'irev_m1':'NUM'
        }

然后我阅读了每一列,并进行了如下数据处理:

^{pr2}$

attribute-dict是一个字典,它包含变量名:变量类型映射为:

{
'new_video': 'CAT'
'ord_m1':'NUM'
'rev_m1':'NUM'
'equip_m1':'NUM'
'oev_m1':'NUM'
'irev_m1':'NUM'
}

但是,这种逐列操作在大小为**(500万行*3400列)**的数据集上运行需要很长时间。目前运行时间大约为 12小时以上。 我希望尽可能减少这一点,我可以想到的一种方法是一次处理所有NUM列,然后逐个列处理 对于CAT变量。 然而,我既不确定Python中的代码能否实现这一点,也不确定这是否真的能加快进程。 有人能帮帮我吗!在


Tags: csv数据newbasevideoevalrevnum
2条回答

对于数值列,它很简单:

num_cols = [k for k, v in attribute_dict.items() if v == 'NUM']
print (num_cols)
['ord_m1', 'rev_m1', 'equip_m1', 'oev_m1', 'irev_m1']

df1 = pd.read_csv('df_seg_sample.csv', usecols = [num_cols]).fillna(0)

但第一部分代码是性能问题,尤其是在为5 million rows调用的^{}中:

^{pr2}$

不幸的是,在块中存在问题进程get_dummies。在

我有三点建议你加快计算速度:

  1. 看看熊猫的能力。HDF是一个二进制文件 快速读写数据到磁盘的格式。在
  2. 我会一次读入你的csv文件的更大的块(几列)(取决于 你的记忆力有多大)。在
  3. 有许多pandas操作可以同时应用于每个列。例如nunique()(提供唯一值的数量,因此不需要unique().size)。通过这些列操作,您可以通过使用二进制向量进行选择来轻松过滤列。E、 g
df = df.loc[:, df.nunique() > 100] 
#filter out every column where less then 100 unique values are present

另外,来自pandas on large data workflow作者的answer可能对您很感兴趣。在

相关问题 更多 >