You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扁平化Pandas的Series嵌套Series结构?

解决嵌套Series扁平化问题

你遇到的核心问题是:对Series调用str.extract后返回的是单列DataFrame,直接取行得到的是Series对象,而非单个字符串值。以下是两种无需遍历的扁平化方法:

方法1:直接提取后压缩为一维Series

利用squeeze()方法将单列DataFrame转换为一维Series,每个元素即为提取到的字符串:

import pandas as pd
df = pd.DataFrame({"a": ["asf cat llma 3X dog elepnt", "cat dog child monkey 5X sljka", "fsdjkl; dsfaa"]})

# 提取并扁平化
sr_flat = df[df.a.str.contains("[3-6]X", na=False)].a.str.extract("([3-6]X)", expand=True).squeeze()

# 验证类型
[type(sr_flat.iloc[i]) for i in range(sr_flat.shape[0])]
# 输出:[<class 'str'>, <class 'str'>]

方法2:先提取再筛选(更清晰的流程)

先对整列完成提取操作,再筛选非空结果,最后压缩为一维Series:

import pandas as pd
df = pd.DataFrame({"a": ["asf cat llma 3X dog elepnt", "cat dog child monkey 5X sljka", "fsdjkl; dsfaa"]})

# 第一步:提取所有行的匹配结果
extracted_df = df['a'].str.extract("([3-6]X)")
# 第二步:筛选出有有效结果的行并压缩
sr_flat = extracted_df.dropna().squeeze()

为什么原来的代码会得到嵌套Series?

你调用sr.iloc[i]时,取的是DataFrame的行,而DataFrame的行本身就是Series类型。通过squeeze()或直接取列(extracted_df.iloc[:, 0]),可以将单列DataFrame转换为每个元素都是字符串的一维Series,从而实现扁平化。

内容的提问来源于stack exchange,提问作者johnrobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:35:08