使用pandas split、explode实现按字符分割列并转为多行

本文介绍如何使用Pandas库高效地将包含多个值的列拆分成多行,同时保持数据间的一一对应关系,避免数据拆分过程中的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有这么一组数据:

>>> df = pd.DataFrame([{'编码':'01', '价格':'1.1,1.3,3.4', '水果':'苹果,柿子,梨'},{'编码':'01', '价格':'2.2,3.4', '水果':'桔子,香蕉'}])
>>> print(df)
   编码           价格       水果
0  00  1.1,1.3,3.4  苹果,柿子,1  01      2.2,3.4    桔子,香蕉

其中价格和水果是按照位置一一对应的,如苹果:1.1、柿子:1.3、梨:3.4,我们希望将价格与水果两列都拆开,但又不影响水果名与价格的对应关系

   编码   价格  水果
0  00  1.1  苹果
1  00  1.3  柿子
2  00  3.43  01  2.2  桔子
4  01  3.4  香蕉

通过如下操作即可实现

>>> df.set_index(['编码']).apply(lambda x: x.str.split(',').explode()).reset_index()

其中set_index和reset_index()是为了锁定编码列,防止误将其进行拆分,上面例子中编码列不存在逗号,因而这步加不加对结果没有影响。
在使用过程中发现,如果set_index中列数过多容易报错,因而可将原表拆为两部分,一部分为不需要拆分的列,另一部分仅为需要拆分的列;然后将后者拆分后再通过某公共列进行merge。
参考:https://stackoverflow.com/a/50731254

PythonPandas库中,分割中的数据为多行数据通常涉及以下几个步骤: 1. **创建或读取DataFrame**:首先,你需要有一个包含需要分割数据的DataFrame。这个DataFrame至少包含一,其中的数据需要被分割。 2. **使用`str.split`方法**:Pandas字符串操作方法`str.split`可以用来分割字符串。如果你要分割的是字符串类型的数据,你可以对目标应用这个方法。默认情况下,`str.split`会在分隔符处分割字符串,返回一个表。如果是在分隔符之间,可以使用`expand=True`参数将分割后的结果扩展为多个。 3. **使用`explode`方法**:当你分割了数据之后,你会得到一个包含表的。为了将这些表中的元素转换为单独的行,你可以使用`explode`方法。`explode`方法会将表中的每个元素拆分成单独的行,同时保持其他中的值不变。 下面是一个简单的例子: 假设我们有一个DataFrame `df`,其中包含一名为`col`的数据,中的数据包含了用逗号分隔的多个值: ```python import pandas as pd # 创建一个DataFrame df = pd.DataFrame({ 'col': ['a,b', 'c,d,e', 'f'] }) # 分割字符将结果扩展为多个 df_expanded = df['col'].str.split(',', expand=True) # 将扩展后的转换为单独的行 df_exploded = df_expanded.apply(pd.Series.explode) print(df_exploded) ``` 这将输出: ``` 0 1 2 0 a b NaN 1 c d e 2 f NaN NaN ``` 注意,如果原始数据中有空字符串或仅包含空格的字符串,`str.split`方法可能会在表中产生空字符串。在使用`explode`之前,你可能需要处理这些空值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值