新闻中心
使用 Pandas 高效处理文本文件中的混合数据与计算

本教程旨在指导读者如何使用 Python 的 Pandas 库高效地读取包含混合数据类型(如字符串前缀与浮点数)的文本文件,并进行数据清洗与数值计算。文章将详细介绍如何利用 Pandas 的 `read_csv` 函数导入数据,通过字符串操作(如正则表达式或切片)提取数值,并将其转换为适当的数据类型,最终演示如何计算列或行的平均值,从而简化数据处理流程。
在数据分析和科学计算中,我们经常需要处理来自各种源的文本文件。这些文件可能包含结构化数据,但也可能混杂着需要清洗的非标准格式。例如,一个常见场景是从 .dat 文件中读取数据,其中某些列的数值前缀带有非数字字符。本教程将展示如何利用强大的 Pandas 库,以一种高效且Pythonic的方式解决这类问题。
1. 理解数据结构与挑战
假设我们有一个 .dat 文件,其中包含三列数据。第一列是时间戳,第二列和第三列是数值,但它们分别以 "SA" 和 "SC" 字符串开头。例如:
9:01:15 SA7.998 SC7.968 9:01:16 SA7.998 SC7.968
我们的目标是读取这些数据,移除第二列和第三列中的 "SA" 和 "SC" 前缀,将剩余的字符串转换为浮点数,然后对这些数值执行计算,例如求平均值。
传统的做法可能涉及逐行读取文件,然后使用字符串分割和切片手动提取和转换数据。虽然这种方法可行,但对于大型数据集来说,它通常效率低下且代码冗长。
2. 使用 Pandas 高效读取与清洗数据
Pandas 库提供了 read_csv 函数,它不仅能处理 CSV 文件,还能灵活地读取其他分隔符的文本文件。
2.1 导入数据
首先,我们需要安装 Pandas 和 NumPy(如果尚未安装):
pip install pandas numpy
然后,使用 pd.read_csv 读取数据。由于文件使用一个或多个空格作为分隔符,且没有标题行,我们需要指定 sep='\s+'、header=None,并为列指定名称:
import pandas as pd
import numpy as np
# 假设文件名为 'serial_2.dat'
file_path = 'serial_2.dat'
# 读取数据
df = pd.read_csv(file_path, sep='\s+', header=None, names=['time', 's1', 's2'])
print("原始数据框:")
print(df)
print("\n数据类型:")
print(df.dtypes)输出示例:
原始数据框:
time s1 s2
0 9:01:15 SA7.998 SC7.968
1 9:01:16 SA7.998 SC7.968
数据类型:
time object
s1 object
s2 object
dtype: object可以看到,s1 和 s2 列被正确读取为字符串(object 类型)。
2.2 清洗数据:提取数值
接下来,我们需要从 s1 和 s2 列中移除前缀并转换为浮点数。Pandas 提供了多种方法来实现这一点。
方法一:使用正则表达式 (str.extract)
ChuangxinCMS企业网站管理系统1.0
欢迎使用ChuangxinCMS企业网站管理系统软件! ChuangxinCMS是一个采用PHP技术和MYSQL数据库开发的企业网站管理系统,使用ChuangxinCMS能在最短的时间内花费最少的成本来搭建一个功能完善的企业网站,ChuangxinCMS具有一系列完善的内容管理功能,包括文章发布、分类管理、产品发布展示、下载模块等,整个系统页面设计简洁大方,功能实用高效,是中小型企业建站的最佳选择
2
查看详情
如果前缀的模式可能不固定(例如,不总是两个字符,但总是非数字字符),可以使用正则表达式来提取数字部分。^[\D]+(.*) 这个正则表达式的含义是:
- ^: 匹配字符串的开头。
- [\D]+: 匹配一个或多个非数字字符。
- (.*): 捕获之后的所有字符(这通常是我们的数值部分)。
# 使用正则表达式提取数值
df['s1'] = df['s1'].str.extract('^[\D]+(.*)').astype(float)
df['s2'] = df['s2'].str.extract('^[\D]+(.*)').astype(float)
print("\n使用正则表达式清洗后的数据框:")
print(df)
print("\n清洗后数据类型:")
print(df.dtypes)方法二:使用字符串切片 (str[2:])
如果已知前缀总是固定长度(例如,总是两个字符),那么使用字符串切片会更简洁和高效:
# 假设前缀固定为两个字符,使用字符串切片
df['s1'] = df['s1'].str[2:].astype(float)
df['s2'] = df['s2'].str[2:].astype(float)
print("\n使用字符串切片清洗后的数据框:")
print(df)
print("\n清洗后数据类型:")
print(df.dtypes)两种方法都能达到相同的清洗效果,将 s1 和 s2 列转换为浮点数。
3. 执行数值计算:计算平均值
数据清洗完成后,我们可以对 s1 和 s2 列的数值执行各种计算。
3.1 计算全局平均值
要计算 s1 和 s2 列所有数值的全局平均值,可以使用以下方法:
# 方法一:使用 Pandas 的 mean() 链式调用
global_*g_pandas = df[['s1', 's2']].mean().mean()
print(f"\n全局平均值 (Pandas): {global_*g_pandas:.3f}")
# 方法二:将相关列转换为 NumPy 数组后计算
global_*g_numpy = np.mean(df[['s1', 's2']])
print(f"全局平均值 (NumPy): {global_*g_numpy:.3f}")这两种方法都会给出 s1 和 s2 列中所有数值的
总体平均值。
3.2 计算行平均值
如果需要计算每一行的 s1 和 s2 的平均值,并将结果作为新列添加到数据框中,可以使用 mean(axis=1):
# 计算行平均值并添加新列
df['*g'] = df[['s1', 's2']].mean(axis=1)
print("\n添加行平均值列后的数据框:")
print(df)输出示例:
添加行平均值列后的数据框:
time s1 s2 *g
0 9:01:15 7.998 7.968 7.983
1 9:01:16 7.998 7.968 7.9834. 完整示例代码
下面是整合了上述步骤的完整代码示例,用于处理 serial_2.dat 文件:
import pandas as pd
import numpy as np
import os # 用于创建示例文件
# --- 创建一个示例 .dat 文件 ---
# 在实际应用中,您会直接读取现有文件
file_content = """9:01:15 SA7.998 SC7.968
9:01:16 SA7.998 SC7.968
9:01:17 SA8.001 SC7.971
9:01:18 SA7.999 SC7.969
"""
file_path = 'serial_2.dat'
with open(file_path, 'w') as f:
f.write(file_content)
print(f"已创建示例文件: {file_path}\n")
# -----------------------------
# 1. 读取数据
df = pd.read_csv(file_path, sep='\s+', header=None, names=['time', 's1', 's2'])
print("--- 原始数据框 ---")
print(df)
print("\n原始数据类型:")
print(df.dtypes)
# 2. 清洗数据:移除前缀并转换为浮点数
# 假设前缀固定为两个字符,使用字符串切片
df['s1'] = df['s1'].str[2:].astype(float)
df['s2'] = df['s2'].str[2:].astype(float)
# 如果前缀不固定,可以使用正则表达式:
# df['s1'] = df['s1'].str.extract('^[\D]+(.*)').astype(float)
# df['s2'] = df['s2'].str.extract('^[\D]+(.*)').astype(float)
print("\n--- 清洗后的数据框 ---")
print(df)
print("\n清洗后数据类型:")
print(df.dtypes)
# 3. 执行计算:计算平均值
# 3.1 计算全局平均值
global_*g_pandas = df[['s1', 's2']].mean().mean()
print(f"\n--- 计算结果 ---")
print(f"s1 和 s2 列的全局平均值 (Pandas): {global_*g_pandas:.3f}")
global_*g_numpy = np.mean(df[['s1', 's2']])
print(f"s1 和 s2 列的全局平均值 (NumPy): {global_*g_numpy:.3f}")
# 3.2 计算行平均值并添加新列
df['*g_row'] = df[['s1', 's2']].mean(axis=1)
print("\n--- 添加行平均值列后的数据框 ---")
print(df)
# --- 清理示例文件 (可选) ---
# os.remove(file_path)
# print(f"\n已删除示例文件: {file_path}")
# -----------------------------总结
本教程详细介绍了如何使用 Python Pandas 库处理包含非标准格式数据的文本文件。通过 pd.read_csv 可以灵活地导入数据,而 Pandas 的 str 访问器结合字符串切片或正则表达式,则能高效地进行数据清洗和类型转换。最后,我们演示了如何利用 Pandas 和 NumPy 的聚合函数轻松计算全局和行级别的平均值。掌握这些技术,将大大提高您处理结构化和半结构化数据的效率和代码可读性。
以上就是使用 Pandas 高效处理文本文件中的混合数据与计算的详细内容,更多请关注其它相关文章!
# 浮点数
# 怀柔区网站建设市场价格
# 网站seo基本优化原则
# 老川东营销推广方案分析
# 广西seo培训如何营销
# 喝彩网站建设
# 网站建设对商品的好处
# seo关键词排名怎样做
# 普兰店网站优化免费咨询
# 移动网站建设哪些好些
# seo排名廴金手指排名
# 多个
# 移除
# python
# 数据结构
# 可以使用
# 文本文件
# 企业网站
# 管理系统
# 转换为
# 代码可读性
# 聚合函数
# 数据清洗
# csv
# 正则表达式
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
优化大型XML文件解析:基于Python流式处理的内存高效方案
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
J*aScript对象创建方式_J*aScript设计模式应用
Go语言中Map值调用指针接收器方法的限制与应对
composer的"require-dev"部分是用来做什么的?
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
qq游戏大厅官方下载_qq游戏免费下载安装入口
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
html5 app怎么运行环境_配html5 app运行环境【教程】
内存检查:在VS Code中调试C++时的内存视图
Mac怎么查看崩溃日志_Mac控制台错误报告分析
知音漫客官网漫画下载_知音漫客网页版阅读记录
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
AI泡沫首次被“刺破”:GPU十年都无法存活!
b站怎么删除评论_b站评论管理与删除操作
J*aScript中赋值与自增运算符的复杂交互与执行机制
J*aScript教程:根据元素文本内容动态设置背景色
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
快手极速版在线观看 官方网页版登录地址
CSS布局中意外空白:解决padding-top导致的顶部间距问题
押井守高度称赞《辐射4》:玩了八年都停不下来!
海棠电脑版入口_通过电脑访问海棠官网阅读
将HTML动态表格多行数据保存到Google Sheet的教程
在Go Martini框架中高效服务动态生成图像的实践指南
J*aScript中管理异步API调用:确保操作顺序与数据一致性
J*aScript中正确使用querySelectorAll与复杂CSS选择器
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
UC浏览器网页版登录入口官网 电脑版网址入口
yy漫画网页版官方入口_yy漫画官网登录页面链接
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
Django通过AJAX异步上传图片并保存至模型的完整指南
如何在Promise链中优雅地中断后续then执行
Fabric模组开发:自定义物品与物品组的现代管理方法
夸克浏览器网页版最新地址 夸克浏览器官方入口合集


2025-11-30
浏览次数:次
返回列表