pandas的字符串的分割之str.split()

本文详细介绍了如何使用Pandas中的split()和rsplit()方法进行列的正序和逆序分割,并提供了具体的参数说明及应用实例,帮助读者掌握数据处理技巧。

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

split()正序分割列;rsplit()逆序分割列
Series.str.split(pat=None, n=-1, expand=False)
参数:

pat : 字符串,默认使用空白分割,分列的依据,可以是空格,符号,字符串等等

n : 整型,默认为-1,既使用所有的分割点分割。就是当用于分列的依据符号在有多个的话需要指定分列的次数(不指定的话就会根据符号有几个分列几次)

expand : 布尔值,默认为False.如果为真返回数据框(DataFrame)或复杂索引(MultiIndex);如果为假,返回序列(Series)或者索引(Index).
----- 如果不需要pandas为你分好列,expand=False就可以了

注意:如果直接用某一列和split()来分列是不行的,因为Series数据类型是没有split()的,所以需要先用.str将这一列转换为类似字符串的格式,就能够使用split()了。

返回值:
split : 参考expand参数(每个具体值的类型是字符串)

例1:然后,我们如果只想要第一列的话,只需要做:
data[‘name’].str.split(’|’,expand=True)[0]

例2:
from pandas.core.frame import DataFrame
df = DataFrame({“a” : [“1”,“2”,“3”,“4”],
“b” : [“5-9”,“6-10”,“7-11”,“8-12”]})

df['b'], df['c'] = df['b'].str.split('-', 1).str           

参考:https://blog.youkuaiyun.com/claroja/article/details/64922694
:https://www.jianshu.com/p/4a2ecf65e3ea
https://blog.youkuaiyun.com/claroja/article/details/64519428

<think>我们被要求使用pandas进行字符串分割操作。根据引用[1],我们知道pandas的Series对象有字符串处理方法,可以通过`.str`访问器来调用。对于分割字符串,我们可以使用`split()`方法。 具体步骤: 1. 导入pandas库。 2. 创建一个DataFrame,其中包含需要分割字符串列。 3. 使用`str.split()`方法对字符串列进行分割,并指定分隔符(默认为空格)。 4. 分割后的结果是一个列表,我们可以将其扩展为多列。 例如,如果我们有一个包含全名的列(如"John Smith"),我们可以将其分割为名字和姓氏两列。 参考引用[1]中的示例,我们可以看到如何使用`.str`访问器(如`.str.upper()`)。类似地,我们可以使用`.str.split()`。 示例代码: 假设我们有一个DataFrame,其中有一列名为"string",包含全名。 我们可以这样分割df[['first_name', 'last_name']] = df['string'].str.split(' ', expand=True) 注意:`expand=True`参数将分割后的列表扩展为多列。如果不设置expand=True,则返回一个包含分割后列表的Series。 另外,如果分割后的部分数量不一致(例如,有些名字有中间名),我们可以指定分割的次数(`n`参数)或使用其他方法处理。 下面我们用一个具体的例子来演示。</think>在 Pandas分割字符串列可以使用 `Series.str.split()` 方法,它会将字符串按指定分隔符拆分为列表。以下是详细操作指南: ### 基础用法 ```python import pandas as pd # 创建示例数据 df = pd.DataFrame({"full_name": ["张 三", "李 四", "王 五"]}) # 按空格分割为两列 df[['姓', '名']] = df['full_name'].str.split(' ', expand=True) ``` 结果: ``` full_name 姓 名 0 张 三 张 三 1 李 四 李 四 2 王 五 王 五 ``` ### 关键参数说明 1. **`pat`**: 分隔符(默认空格),支持正则表达式 ```python # 按逗号分割 df['parts'] = df['info'].str.split(',') ``` 2. **`expand`**: 是否扩展为新列(默认False) ```python # 分割后自动扩展为多列 df[['city', 'district']] = df['address'].str.split('-', expand=True) ``` 3. **`n`**: 最大分割次数 ```python # 只分割1次(保留剩余部分) df['first_part'] = df['code'].str.split('_', n=1, expand=True)[0] ``` ### 进阶用法 1. **结合`str.get()`提取特定位置** ```python # 提取分割后的第二个元素 df['middle_name'] = df['name'].str.split().str.get(1) ``` 2. **处理缺失值** ```python # 避免NaN值报错 df['domain'] = df['email'].str.split('@').str[-1].fillna("未知") ``` 3. **正则表达式分割** ```python # 按数字分割字符串 df[['letters', 'numbers']] = df['mixed'].str.split(r'\d+', expand=True) ``` ### 实际应用示例 ```python # 处理含前缀的电话号码 df = pd.DataFrame({"phone": ["+86-13800138000", "852-98765432"]}) df[['区号', '号码']] = df['phone'].str.split('-', n=1, expand=True) # 结果: # phone 区号 号码 # 0 +86-13800138000 +86 13800138000 # 1 852-98765432 852 98765432 ``` > **注意**:当原始列包含不等长的分割结果时,建议先检查最大分割段数: > ```python > max_split = df['column'].str.split().str.len().max() > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值