Pandas 仍在数据处理中占据重要地位
TL;DR · AI 摘要
Pandas 仍是数据处理的首选工具,因其功能强大且社区支持广泛。
核心要点
- Pandas 在数据清洗和转换方面具有显著优势。
- 尽管有其他工具出现,但 Pandas 的生态系统依然活跃。
- Pandas 的易用性和灵活性使其在数据科学领域持续流行。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Pandas 数据处理
- 优势
- 功能强大
- 易用性
- 生态系统
- 社区活跃
- 工具支持
金句 / Highlights
值得收藏与分享的关键句。
Pandas 不仅功能强大,而且易于学习,是数据科学家的首选工具。
尽管有其他工具出现,但 Pandas 的生态系统仍然活跃,这使其保持竞争力。
Pandas 的灵活性和易用性使其在数据处理领域持续流行。
Pandas 屹立不倒:为何它仍是我的数据整理首选工具 | Towards Data Science
我们重视您的隐私
我们使用 cookie 来提升您的浏览体验、提供个性化广告或内容,并分析我们的流量。点击"全部接受",即表示您同意我们使用 cookie。
自定义 拒绝全部 接受全部
自定义同意偏好
我们使用 cookie 来帮助您高效浏览并执行特定功能。您可以在以下每个同意类别下找到所有 cookie 的详细信息。
被归类为"必要"的 cookie 会存储在您的浏览器中,因为它们对于启用网站的基本功能至关重要。...显示更多
必要 始终启用
必要 cookie 是启用本网站基本功能所必需的,例如提供安全登录或调整您的同意偏好。这些 cookie 不存储任何个人身份数据。
- Cookie BCTempID
- 持续时间 10 分钟
- 描述 暂无描述
- Cookie __cf_bm
- 持续时间 1 小时
- 描述 此 cookie 由 Cloudflare 设置,用于支持 Cloudflare 机器人管理。
- Cookie AWSALBCORS
- 持续时间 7 天
- 描述 Amazon Web Services 设置此 cookie 用于负载均衡。
- Cookie _cfuvid
- 持续时间 会话期间
- 描述 Cloudflare 设置此 cookie 用于跨会话跟踪用户,通过保持会话一致性和提供个性化服务来优化用户体验
- Cookie li_gc
- 持续时间 6 个月
- 描述 Linkedin 设置此 cookie 用于存储访客关于非必要用途使用 cookie 的同意状态。
- Cookie __hssrc
- 持续时间 会话期间
- 描述 当 Hubspot 更改会话 cookie 时会设置此 cookie。__hssrc cookie 设置为 1 表示用户已重启浏览器,如果该 cookie 不存在,则假定为新会话。
- Cookie __hssc
- 持续时间 1 小时
- 描述 HubSpot 设置此 cookie 用于跟踪会话,并确定是否应在 __hstc cookie 中增加会话编号和时间戳。
- Cookie wpEmojiSettingsSupports
- 持续时间 会话期间
- 描述 当用户与 WordPress 网站上的表情符号交互时,WordPress 会设置此 cookie。它有助于确定用户的浏览器是否能正确显示表情符号。
- Cookie BCSessionID
- 持续时间 1 年 1 个月 4 天
- 描述 Blueconic 设置此 cookie 作为 BlueConic 配置文件的唯一标识符。
- Cookie _octo
- 持续时间 1 年
- 描述 暂无描述
- Cookie logged_in
- 持续时间 1 年
- 描述 暂无描述
- Cookie __Secure-YEC
- 持续时间 过去
- 描述 YouTube 设置此 cookie 用于存储用户通过嵌入式 YouTube 视频使用的视频播放器偏好
- Cookie __eoi
- 持续时间 6 个月
- 描述 当前暂无描述
- Cookie AWSALBTGCORS
- 持续时间 7 天
- 描述 暂无描述
- Cookie login-status-p
- 持续时间 过去
- 描述 当前暂无描述
- Cookie AWSALBTG
- 持续时间 7 天
- 描述 暂无描述
- Cookie csrf_token
- 持续时间 会话期间
- 描述 暂无描述
- Cookie token_v2
- 持续时间 1 天
- 描述 当前暂无描述
- Cookie D
- 持续时间 1 年
- 描述 当前暂无描述
- Cookie PHPSESSID
- 持续时间 会话期间
- 描述 此 cookie 是 PHP 应用程序原生 cookie。该 cookie 存储并识别用户的唯一会话 ID,以管理网站上的用户会话。此 cookie 为会话 cookie,会在所有浏览器窗口关闭时删除。
- Cookie VISITOR_PRIVACY_METADATA
- 持续时间 6 个月
- 描述 YouTube 设置此 cookie 用于存储用户在当前域的 cookie 同意状态。
- Cookie cookietest
- 持续时间 会话期间
- 描述 cookietest cookie 通常用于确定用户的浏览器是否接受 cookie,这对网站功能和用户体验至关重要。
- Cookie __Host-airtable-session
- 持续时间 1 年
- 描述 此 cookie 用于使我们能够集成 Airtable 的服务。
- Cookie __Host-airtable-session.sig
- 持续时间 1 年
- 描述 此 cookie 用于使我们能够集成 Airtable 的服务。
- Cookie m
- 持续时间 1 年 1 个月 4 天
- 描述 Stripe 设置此 cookie 用于防欺诈目的。它识别用于访问网站的设备,允许网站相应地进行格式化。
- Cookie BIGipServer*
- 持续时间 会话期间
- 描述 Marketo 设置此 cookie 用于收集用户在线活动信息,并建立其兴趣档案以提供与用户相关的广告。
- Cookie __cfruid
- 持续时间 会话期间
- 描述 Cloudflare 设置此 cookie 用于识别可信的 Web 流量。
- Cookie _GRECAPTCHA
- 持续时间 6 个月
- 描述 Google Recaptcha 服务设置此 cookie 用于识别机器人,以保护网站免受恶意垃圾邮件攻击。
- Cookie __Secure-YNID
- 持续时间 6 个月
- 描述 Google cookie 用于保护用户安全并防止欺诈,尤其是在登录过程中。
- Cookie cookieyes-consent
- 持续时间 1 年
- 描述 CookieYes 设置此 Cookie 用于记住用户的同意偏好,以便在后续访问此网站时尊重他们的偏好。它不会收集或存储任何有关网站访问者的个人信息。
功能性
- [x]
功能性 Cookie 有助于执行某些功能,如在社交媒体平台上分享网站内容、收集反馈以及其他第三方功能。
- Cookie lidc
- 持续时间 1 天
- 描述 LinkedIn 设置 lidc Cookie 以方便数据中心选择。
- Cookie brw
- 持续时间 1 年
- 描述 暂无描述。
- Cookie brwConsent
- 持续时间 5 分钟
- 描述 描述目前不可用。
- Cookie WMF-Uniq
- 持续时间 1 年
- 描述 描述目前不可用。
- Cookie loom_anon_comment
- 持续时间 1 年
- 描述 暂无描述。
- Cookie loom_referral_video
- 持续时间 会话
- 描述 描述目前不可用。
- Cookie VISITOR_INFO1_LIVE
- 持续时间 6 个月
- 描述 由 YouTube 设置的 Cookie,用于测量带宽,以确定用户获得的是新版还是旧版播放器界面。
- Cookie yt-remote-connected-devices
- 持续时间 永不过期
- 描述 YouTube 设置此 Cookie,通过嵌入的 YouTube 视频存储用户的视频偏好。
- Cookie ytidb::LAST_RESULT_ENTRY_KEY
- 持续时间 永不过期
- 描述 YouTube 使用 Cookie ytidb::LAST_RESULT_ENTRY_KEY 来存储用户点击的最后一个搜索结果条目。此信息用于通过在未来提供更相关的搜索结果来改善用户体验。
- Cookie yt-remote-device-id
- 持续时间 永不过期
- 描述 YouTube 设置此 Cookie,通过嵌入的 YouTube 视频存储用户的视频偏好。
- Cookie yt-remote-session-name
- 持续时间 会话
- 描述 YouTube 使用 yt-remote-session-name Cookie 通过嵌入的 YouTube 视频存储用户的视频播放器偏好。
- Cookie yt-remote-fast-check-period
- 持续时间 会话
- 描述 YouTube 使用 yt-remote-fast-check-period Cookie 存储用户对嵌入 YouTube 视频的视频播放器偏好。
- Cookie yt-remote-session-app
- 持续时间 会话
- 描述 YouTube 使用 yt-remote-session-app Cookie 存储用户偏好以及有关嵌入的 YouTube 视频播放器界面的信息。
- Cookie yt-remote-cast-available
- 持续时间 会话
- 描述 yt-remote-cast-available Cookie 用于存储用户关于其 YouTube 视频播放器是否支持投射的偏好。
- Cookie yt-remote-cast-installed
- 持续时间 会话
- 描述 yt-remote-cast-installed Cookie 用于通过嵌入的 YouTube 视频存储用户的视频播放器偏好。
- Cookie cp_session
- 持续时间 3 个月
- 描述 Codepen 设置此 Cookie 用于网站中的帮助系统。
- Cookie loid
- 持续时间 1 年 1 个月 4 天
- 描述 此 Cookie 由 Reddit 设置。该 Cookie 支持将网站内容分享到社交媒体平台。
分析
- [x]
分析性 Cookie 用于了解访问者如何与网站互动。这些 Cookie 有助于提供诸如访问者数量、跳出率、流量来源等指标的信息。
- Cookie __hstc
- 持续时间 6 个月
- 描述 Hubspot 设置此主 Cookie 用于跟踪访问者。它包含域名、初始时间戳(首次访问)、最后时间戳(上次访问)、当前时间戳(本次访问)和会话编号(为每个后续会话递增)。
- Cookie hubspotutk
- 持续时间 6 个月
- 描述 HubSpot 设置此 Cookie 以跟踪网站的访问者。此 Cookie 在表单提交时传递给 HubSpot,并在去重联系人时使用。
- Cookie _ga
- 持续时间 1 年 1 个月 4 天
- 描述 Google Analytics 设置此 Cookie 来计算访问者、会话和广告系列数据,并跟踪网站使用情况以生成网站的分析报告。该 Cookie 匿名存储信息,并分配一个随机生成的数字来识别唯一访问者。
- Cookie _ga_*
- 持续时间 1 年 1 个月 4 天
- 描述 Google Analytics 设置此 Cookie 来存储和统计页面浏览量。
- Cookie __Host-psifi.analyticsTrace
- 持续时间 6 小时
- 描述 描述目前不可用。
- Cookie __Host-psifi.analyticsTraceV2
- 持续时间 6 小时
- 描述 描述目前不可用。
- Cookie _gh_sess
- 持续时间 会话
- 描述 GitHub 设置此 Cookie 用于页面之间的临时应用程序和框架状态,例如用户在多步骤表单中所处的步骤。
- Cookie YSC
- 持续时间 会话
- 描述 YSC Cookie 由 YouTube 设置,用于跟踪 YouTube 页面上嵌入视频的观看次数。
- Cookie ajs_anonymous_id
- 持续时间 1 年
- 描述 此 Cookie 由 Segment 设置,通过跟踪用户是否之前访问过来统计访问特定网站的人数。
- Cookie vuid
- 持续时间 1 年 1 个月 4 天
- 描述 Vimeo 安装此 Cookie,通过设置唯一 ID 在网站上嵌入视频来收集跟踪信息。
性能
- [x]
性能 Cookie 用于理解和分析网站的关键性能指标,这有助于为访问者提供更好的用户体验。
- Cookie AWSALB
- 持续时间 7 天
- 描述 AWSALB 是由 Amazon Web Services 设置的应用程序负载均衡器 Cookie,用于将会话映射到目标。
- Cookie acq
- 持续时间 过去
- 描述 描述目前不可用。
- Cookie acq.sig
- 持续时间 过去
- 描述 当前描述不可用。
- Cookie ptc
- 持续时间 2 年
- 描述 无可用描述。
广告
- [x]
广告 Cookie 用于根据您之前访问的页面为访问者提供定制广告,并分析广告活动的有效性。
- Cookie muc_ads
- 持续时间 1 年 1 个月 4 天
- 描述 Twitter 设置此 Cookie 以收集用户行为和互动数据,从而优化网站。
- Cookie guest_id_marketing
- 持续时间 1 年 1 个月 4 天
- 描述 Twitter 设置此 Cookie 以识别和跟踪网站访问者。
- Cookie guest_id_ads
- 持续时间 1 年 1 个月 4 天
- 描述 Twitter 设置此 Cookie 以识别和跟踪网站访问者。
- Cookie personalization_id
- 持续时间 1 年 1 个月 4 天
- 描述 Twitter 设置此 Cookie 以集成和分享社交媒体功能,并存储用户如何使用网站的信息,用于跟踪和定向。
- Cookie guest_id
- 持续时间 1 年 1 个月 4 天
- 描述 Twitter 设置此 Cookie 以识别和跟踪网站访问者。它会记录用户是否登录到 Twitter 平台,并收集广告偏好信息。
- Cookie bcookie
- 持续时间 1 年
- 描述 LinkedIn 通过 LinkedIn 分享按钮和广告标签设置此 Cookie,以识别浏览器 ID。
- Cookie __Secure-ROLLOUT_TOKEN
- 持续时间 6 个月
- 描述 YouTube 设置此 Cookie 来管理功能发布和实验。它帮助 Google 控制在测试和分阶段发布过程中向用户展示哪些新功能或界面更改,确保在实验期间为特定用户提供一致的体验。
- Cookie yt.innertube::nextId
- 持续时间 永不过期
- 描述 YouTube 设置此 Cookie 以注册一个唯一 ID,用于存储用户观看过的 YouTube 视频数据。
- Cookie yt.innertube::requests
- 持续时间 永不过期
- 描述 YouTube 设置此 Cookie 以注册一个唯一 ID,用于存储用户观看过的 YouTube 视频数据。
- Cookie session_tracker
- 持续时间 会话
- 描述 此 Cookie 由 Reddit 设置。用于识别可信的网络流量,并协助网站上的广告投放。
- Cookie edgebucket
- 持续时间 会话
- 描述 Reddit 设置此 Cookie 以保存登录 Reddit 用户的信息,用于广告推荐和内容更新。
- Cookie did
- 持续时间 1 年
- 描述 Arbor 设置此 Cookie 以向网站访问者展示定向广告。此 Cookie 在 2 个月或 1 年后过期。
未分类
其他未分类的 Cookie 是正在分析但尚未归类的 Cookie。
无 Cookie 可显示。
拒绝所有 保存我的偏好 接受所有
向全球数据专业人士社区发布 AI、ML 和数据科学见解。
- * *
切换移动导航
切换搜索
搜索
Pandas 不会消失:为什么它仍然是我数据整理的首选工具
处理数十亿行数据可能是例外情况,但对于其他一切任务,Pandas 仍然是一个非常可靠的工具。
2026 年 5 月 17 日
5 分钟阅读
分享

图片 由 Efe Yagiz Soysal 通过 Unsplash 提供
当我在 2020 年刚开始学习数据科学时,Pandas 是最流行的工具之一。尽管新工具专注于改进 Pandas 在处理超大型数据集方面的弱点,但我仍然使用 Pandas 进行许多数据清洗、处理和分析任务。是的,在处理数十亿行数据时,Pandas 会让我感到棘手,但对于处理任何低于这个规模的数据来说,它绝对绰绰有余。
我看到 Pandas 不仅被用于探索性数据分析或在笔记本中使用,还被用于生产系统中。
在本文中,我将介绍一些数据清洗和处理操作,以展示 Pandas 的强大能力。
让我们从数据集开始,该数据集包含库存单位(SKU)以及这些 SKU 的搜索 API 响应。
import pandas as pd
search_results = pd.read_csv("search_results.csv")
search_results.head()
搜索结果是一个字典列表,看起来像这样:
search_results.loc[0, "search_result"][{'my_id': 'HBCV00007F5Y2B', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00007UPQBM', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00008I29IH', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00006U3ZYB', 'distance': 0.8961254358291626, 'entity': {}},
{'my_id': 'HBCV0000AFA4H6', 'distance': 0.8702399730682373, 'entity': {}},
{'my_id': 'HBCV00009CDGD4', 'distance': 0.86175537109375, 'entity': {}},
{'my_id': 'HBCV000046336T', 'distance': 0.8594968318939209, 'entity': {}},
{'my_id': 'HBCV00009QDZRT', 'distance': 0.8572311997413635, 'entity': {}},
{'my_id': 'HBCV00008E11P3', 'distance': 0.8553324937820435, 'entity': {}},
{'my_id': 'HBV00000C4IY6', 'distance': 0.8539167642593384, 'entity': {}}]
... 以及剩余 5 个实体从输出中我们可以看到,由于最后的部分("... 以及剩余 5 个实体"),这不是一个规范的字典列表格式。而且它被保存为单个字符串。
为了更好地利用它,我们需要将其转换为规范的字典列表。以下代码行通过在 "..." 处分割字符串并取第一个分割部分来移除最后的部分。
search_results.loc[0, "search_result"].split("...")[0].strip()然而,输出仍然是单个字符串。我们可以使用 Python 内置的 ast 模块将其转换为列表:
import ast
res = ast.literal_eval(search_results.loc[0, "search_result"].split("...")[0].strip())
res
[{'my_id': 'HBCV00007F5Y2B', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00007UPQBM', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00008I29IH', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00006U3ZYB', 'distance': 0.8961254358291626, 'entity': {}},
{'my_id': 'HBCV0000AFA4H6', 'distance': 0.8702399730682373, 'entity': {}},
{'my_id': 'HBCV00009CDGD4', 'distance': 0.86175537109375, 'entity': {}},
{'my_id': 'HBCV000046336T', 'distance': 0.8594968318939209, 'entity': {}},
{'my_id': 'HBCV00009QDZRT', 'distance': 0.8572311997413635, 'entity': {}},
{'my_id': 'HBCV00008E11P3', 'distance': 0.8553324937820435, 'entity': {}},
{'my_id': 'HBV00000C4IY6', 'distance': 0.8539167642593384, 'entity': {}}]现在我们将搜索结果作为规范的字典列表。这仅适用于单行。我们需要对所有 SKU(即整个 SKU 列)应用相同的操作。
一种选择是遍历所有行并执行相同的操作。然而,这不是最佳选择。我们应该尽可能优先使用向量化操作。向量化操作基本上意味着一次性在所有行上执行代码。
在单行上,我使用分割来去除字符串的最后部分,但在向量化操作中这并不奏效。一个更稳健的选择似乎是使用正则表达式。
search_results.loc[:, 'search_result'] = search_results['search_result'].str.replace(r"\.\.\..*", "", regex=True).str.strip()这段代码选择 "..." 及其后的所有内容,并将其替换为空。换句话说,它移除了 "... 以及剩余 5 个实体" 部分。
现在,搜索结果列中的所有行都作为规范的字典列表。
search_results.loc[10, "search_result"]
"[{'my_id': 'HBCV00007F5Y2B', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00007UPQBM', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00008I29IH', 'distance': 1.0, 'entity': {}},
{'my_id': 'HBCV00006U3ZYB', 'distance': 0.8961254358291626, 'entity': {}},
{'my_id': 'HBCV0000AFA4H6', 'distance': 0.8702399730682373, 'entity': {}},
{'my_id': 'HBCV00009CDGD4', 'distance': 0.86175537109375, 'entity': {}},
{'my_id': 'HBCV000046336T', 'distance': 0.8594968318939209, 'entity': {}},
{'my_id': 'HBCV00009QDZRT', 'distance': 0.8572311997413635, 'entity': {}},
{'my_id': 'HBCV00008E11P3', 'distance': 0.8553324937820435, 'entity': {}},
{'my_id': 'HBV00000C4IY6', 'distance': 0.8539167642593384, 'entity': {}}]"它们仍然保存为字符串,但我可以在下一步使用 ast 模块轻松地将它们转换为列表。
我感兴趣的是搜索结果中返回的 SKU。我将通过提取字典中的 SKU 来创建一个新列。我可以通过字典的 "my_id" 键来访问它们。
这个操作包含 3 个部分:
- 使用 literal_eval 函数将搜索结果字符串转换为列表
- 从字典的 my_id 键中提取 SKU
- 在列表推导式中执行此操作,以从列表中的所有字典中获取 SKU
我们可以通过对所有行应用 lambda 函数来完成所有这些操作,如下所示:
search_results.loc[:, "result_skus"] = \
search_results["search_result"].apply(lambda x: [item['my_id'] for item in ast.literal_eval(x)])
search_results.head()
result_skus 列中的每一行都包含 10 个 SKU 的列表。假设我需要将这 10 个 SKU 放在不同的行中。对于 sku 列中的每一行,将从 result_skus 列中的列表创建 10 行。在 Pandas 中有一个非常简单的方法可以做到这一点,即 explode 函数。
data = search_results[["sku", "result_skus"]].explode("result_skus", ignore_index=True)
data.head()
我们创建了一个包含 sku 和 result_skus 列的新数据框。下图演示了 explode 函数的功能:

考虑相反的情况。我们有一个如上图所示的数据框,但希望将某个 SKU 的所有结果放在同一行中。
我们可以使用 groupby 函数按 sku 对行进行分组,然后在 result_skus 列上应用 list 函数:
new_data = data.groupby("sku", as_index=False)["result_skus"].apply(list)
new_data.head()这将使我们回到上一步:

使用 explode 函数,我们为 result_skus 列中的每个 SKU 创建了独立行的数据框。但如果我们需要将它们拆分到不同列而不是行中呢?
一种方案是对 result_skus 列应用 pd.Series 函数,然后将生成的列与原始数据框拼接。
new_cols = new_data["result_skus"].apply(pd.Series)
new_data = pd.concat([new_data, new_cols], axis=1)
new_data.head()
0到9列包含了 result_skus 列中的10个SKU。这段使用 apply 函数的代码并非向量化操作。
我们还有另一种选择,它是向量化操作且速度更快:
new_cols = pd.DataFrame(new_data["result_skus"].tolist())
new_data = pd.concat([new_data, new_cols], axis=1)这段代码能生成与上述相同的数据框,但执行效率更高。
我演示了数据科学家或分析师在工作中可能遇到的典型数据清洗与处理任务。我在这个领域已有五年多经验,除了处理超大规模数据集(例如数十亿行)的情况外,Pandas 始终能满足我的需求。
更适合处理这类大型数据的工具都具有与 Pandas 相似的语法。例如 PySpark 就像是 Pandas 和 SQL 的结合体,Polars 在语法上也与 Pandas 非常相似。因此,学习和实践 Pandas 对于数据科学与人工智能领域的从业者来说,仍然是极具价值的技能。
感谢阅读。
- * *
作者:Soner Yıldırım
数据分析, 数据科学, 机器学习, Pandas, Python
分享本文
《Towards Data Science》是一个社区出版物。提交您的见解以触达全球读者,并通过 TDS 作者付费计划获得收益。
相关文章
数据工程 Fabric Madness 第三部分 Roger Noble 2024年4月15日 13分钟阅读
机器学习 频谱数据的特征工程 Marcin Stasko 2023年12月1日 13分钟阅读
数据科学 每周精选必读编辑推荐与原创特辑 TDS 编辑团队 2021年3月18日 4分钟阅读
数据科学 每周精选必读编辑推荐与原创特辑 TDS 编辑团队 2022年8月11日 3分钟阅读
## 使用SQL验证平衡括号
数据科学 仅用 SQL 检查包含开闭括号的字符串格式正确性 Dhruv Matani 2023年1月4日 阅读时长6分钟
- ## 基础强化学习:动态规划
数据科学 通往强化学习之路 Rahul Bhadani 2022年12月19日 阅读时长5分钟
人工智能 在这些产品中找到你的定位将帮助您获得额外收入 Madison Hunter 2022年9月15日 阅读时长8分钟
您的数据科学与AI家园。全球领先的数据科学、数据分析、数据工程、机器学习和人工智能专业出版物。
© Insight Media Group, LLC 2026
订阅我们的新闻通讯
调整浏览器窗口大小时,此页面的某些区域可能会移动。请务必检查标题和文档顺序。
##
##
##
##
##