Python 将真正大的数据帧的列拆分为两个(或更多)新列 问题

Python 将真正大的数据帧的列拆分为两个(或更多)新列 问题,python,pandas,dataframe,large-data,Python,Pandas,Dataframe,Large Data,嘿!我在尝试将数据帧的一列拆分为两个(甚至更多)新列时遇到了一些问题。我认为这取决于我使用的数据帧来自一个非常大的csv文件,几乎相当于10gb的空间。一旦它被加载到熊猫数据帧中,它将由约60mil的行和5列表示 例子 最初,数据帧看起来像这样: In [1]: df Out[1]: category other_col 0 animal.cat 5 1 animal.dog 3 2

嘿!我在尝试将数据帧的一列拆分为两个(甚至更多)新列时遇到了一些问题。我认为这取决于我使用的数据帧来自一个非常大的csv文件,几乎相当于10gb的空间。一旦它被加载到熊猫数据帧中,它将由约60mil的行和5列表示

例子 最初,数据帧看起来像这样:

In [1]: df
Out[1]: 
               category  other_col
0            animal.cat          5
1            animal.dog          3
2  clothes.shirt.sports          6
3           shoes.laces          1
4                  None          0
我想首先删除未定义类别的df行(即最后一行),然后根据点出现的位置将类别列拆分为三个新列:一个用于主类别,一个用于第一个子类别,另一个用于最后一个子类别(如果确实存在)。最后,我想把整个数据帧合并在一起

换句话说,这就是我想要得到的:

In [2]: df_after
Out[2]: 
   other_col main_cat sub_category_1 sub_category_2
0          5   animal            cat           None
1          3   animal            dog           None
2          6  clothes          shirt         sports
3          1    shoes          laces           None
我的方法 我的做法如下:

df = df[df['category'].notnull()]

df_wt_cat = df.drop(columns=['category'])

df_cat_subcat = df['category'].str.split('.', expand=True).rename(columns={0: 'main_cat', 1: 'sub_category_1', 2: 'sub_category_2', 3: 'sub_category_3'})

df_after = pd.concat([df_wt_cat, df_cat_subcat], axis=1)
对于小数据集,它似乎工作得很好,但当它应用于如此大的数据帧时,它会占用太多内存,而Jupyter内核刚刚死亡

我试着把数据帧分块读取,但我不确定接下来该怎么做;显然,我已经尝试在堆栈溢出上搜索这类问题,但没有找到任何有用的东西


感谢您的帮助

split
join
方法执行此任务:

results = df['category'].str.split(".", expand = True))
df_after = df.join(results)

完成此操作后,您可以自由筛选生成的数据帧

谢谢您的回答!但这不正是我告诉你我试过的吗?除了加入,我是说。但问题仍然存在,因为我做了完全相同的事情:数据集太大,无法完成此任务,而内核在应用于数据集时会死掉。对于缩放问题,您可能应该使用dask(),您能否详细介绍一下如何使用dask完成此任务?我从未使用过它,因此我不确定如何继续。引用任务常见用法:“Dask数据帧用于通常需要熊猫的情况,通常是熊猫因数据大小或计算速度而失败时:-操作大型数据集,即使这些数据集不适合内存(通过使用多个核加速长时间计算),也可以在大型数据集上使用标准操作(如groupby、join和时序计算)进行分布式计算“.Dask DataFrame复制Pandas API,并允许您沿轴拆分数据集,之后它依赖于并行性,因为它较少绑定到GIL(全局解释器锁)。