新闻中心

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

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

使用 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企业网站管理系统1.0

欢迎使用ChuangxinCMS企业网站管理系统软件! ChuangxinCMS是一个采用PHP技术和MYSQL数据库开发的企业网站管理系统,使用ChuangxinCMS能在最短的时间内花费最少的成本来搭建一个功能完善的企业网站,ChuangxinCMS具有一系列完善的内容管理功能,包括文章发布、分类管理、产品发布展示、下载模块等,整个系统页面设计简洁大方,功能实用高效,是中小型企业建站的最佳选择

ChuangxinCMS企业网站管理系统1.0 2 查看详情 ChuangxinCMS企业网站管理系统1.0

如果前缀的模式可能不固定(例如,不总是两个字符,但总是非数字字符),可以使用正则表达式来提取数字部分。^[\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.983

4. 完整示例代码

下面是整合了上述步骤的完整代码示例,用于处理 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模组开发:自定义物品与物品组的现代管理方法  夸克浏览器网页版最新地址 夸克浏览器官方入口合集 

搜索