Pandas 数据转换:从 CSV 文件读取秒数并转换为分钟

聖光之護
发布: 2025-10-14 12:59:00
原创
727人浏览过

pandas 数据转换:从 csv 文件读取秒数并转换为分钟

本文旨在解决使用 Pandas 将 CSV 文件中的秒数列转换为分钟时遇到的 `TypeError` 问题。通过分析错误原因,并提供详细的代码示例,帮助读者理解 Pandas 中 `DataFrame` 和 `Series` 的区别,以及如何正确使用 `pd.to_timedelta` 函数进行时间单位转换。

在使用 Pandas 处理数据时,经常需要进行数据类型转换。一个常见的需求是将以秒为单位的时间数据转换为分钟。pd.to_timedelta 函数是 Pandas 中用于处理时间间隔的强大工具。然而,当从 CSV 文件读取数据时,直接应用 pd.to_timedelta 可能会遇到 TypeError。本文将深入探讨这个问题,并提供解决方案。

理解问题:DataFrame vs Series

错误的关键在于 pd.to_timedelta 函数的输入类型要求。虽然 DataFrame 和 Series 都是 Pandas 的数据结构,但它们在使用上有所区别。pd.to_timedelta 函数需要的是一个 Series 对象,即一维数组,而不是整个 DataFrame。

当你直接从 CSV 文件读取数据,并尝试将整个 DataFrame 的一列传递给 pd.to_timedelta 时,就会出现类型错误。

解决方案:正确选择列

当CSV文件具有多重列标题时,需要特别注意如何选择正确的列。以下是一个示例,展示了如何从具有多重标题的 CSV 文件中选择正确的列并将其转换为 timedelta:

Swapface人脸交换
Swapface人脸交换

一款创建逼真人脸交换的AI换脸工具

Swapface人脸交换45
查看详情 Swapface人脸交换
import pandas as pd
import io

# 模拟 CSV 文件内容
text = '''"Time"
"s"
"0.193"
"0.697"
"1.074"
"1.579"
"6.083"
"65.460"
"120.730"
"121.116"
"121.624"'''

# 使用 io.StringIO 模拟文件读取
df = pd.read_csv(io.StringIO(text), header = [0,1])

print("['Time']    :", type(df['Time']))
print("['Time','s']:", type(df[('Time','s')])) # 或者 df['Time','s']

print('\n--- before ---\n')
print(df)

# 正确选择列并转换为 timedelta
df[('Time','s')] = pd.to_timedelta(df[('Time','s')], 'min') # 或者 df['Time','s']

print('\n--- after ---\n')
print(df)
登录后复制

代码解释:

  1. 读取 CSV 文件: 使用 pd.read_csv 函数读取 CSV 文件。header=[0,1] 指定 CSV 文件的第一行和第二行作为列标题。
  2. 选择正确的列: 关键在于如何选择包含秒数的列。由于存在多重标题,需要使用 df[('Time','s')] 或 df['Time','s'] 来访问该列。注意,df['Time'] 会返回一个 DataFrame,而不是 Series。
  3. 类型转换: 使用 pd.to_timedelta 函数将选定的列转换为 timedelta 类型,单位为分钟。
  4. 打印结果: 打印转换前后的 DataFrame,以验证转换是否成功。

运行结果:

['Time']    : <class 'pandas.core.frame.DataFrame'>
['Time','s']: <class 'pandas.core.series.Series'>

--- before ---

      Time
         s
0    0.193
1    0.697
2    1.074
3    1.579
4    6.083
5   65.460
6  120.730
7  121.116
8  121.624

--- after ---

                    Time
                       s
0 0 days 00:00:11.580000
1 0 days 00:00:41.820000
2 0 days 00:01:04.440000
3 0 days 00:01:34.740000
4 0 days 00:06:04.980000
5 0 days 01:05:27.600000
6 0 days 02:00:43.800000
7 0 days 02:01:06.960000
8 0 days 02:01:37.440000
登录后复制

注意事项:

  • 确保 CSV 文件中的数据是数值类型,如果不是,需要先使用 astype 函数将其转换为 float64 类型。
  • 在选择列时,要仔细检查列标题的结构,并使用正确的语法来访问目标列。

总结:

通过本文,我们了解了在使用 Pandas 将 CSV 文件中的秒数列转换为分钟时,TypeError 错误的原因以及解决方法。关键在于理解 pd.to_timedelta 函数需要 Series 对象作为输入,并正确选择包含秒数的列。希望本文能够帮助读者更好地使用 Pandas 处理时间数据。

以上就是Pandas 数据转换:从 CSV 文件读取秒数并转换为分钟的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号