将 pandas 数据框中的 datetime64 列拆分为日期和时间列

2024-02-24

如果我有一个数据框,第一列是 datetime64 列。如何将此列拆分为 2 个新列:日期列和时间列。这是到目前为止我的数据和代码:

DateTime,Actual,Consensus,Previous
20140110 13:30:00,74000,196000,241000
20131206 13:30:00,241000,180000,200000
20131108 13:30:00,200000,125000,163000
20131022 12:30:00,163000,180000,193000
20130906 12:30:00,193000,180000,104000
20130802 12:30:00,104000,184000,188000
20130705 12:30:00,188000,165000,176000
20130607 12:30:00,176000,170000,165000
20130503 12:30:00,165000,145000,138000
20130405 12:30:00,138000,200000,268000
...


import pandas as pd
nfp = pd.read_csv("NFP.csv", parse_dates=[0])
nfp

Gives:

Out[10]: <class 'pandas.core.frame.DataFrame'>
         Int64Index: 83 entries, 0 to 82
         Data columns (total 4 columns):
         DateTime     82  non-null values
         Actual       82  non-null values
         Consensus    82  non-null values
         Previous     82  non-null values
         dtypes: datetime64[ns](1), float64(3)

一切都很好,但不知道从这里该做什么。

具体有两点我不确定:

  1. 当我首先读取 csv 文件时可以这样做吗?如果是这样,怎么办?
  2. 任何人都可以帮助我展示如何在执行 csv_read 后进行分割吗?

还有哪里可以查到这类信息吗?

很难找到类库的详细参考谢谢!


如何将 CSV 直接解析为所需的 DataFrame:

将函数字典传递给pandas.read_csv's converters关键字参数:

import pandas as pd
import datetime as DT
nfp = pd.read_csv("NFP.csv", 
                  sep=r'[\s,]',              # 1
                  header=None, skiprows=1,
                  converters={               # 2
                      0: lambda x: DT.datetime.strptime(x, '%Y%m%d'),  
                      1: lambda x: DT.time(*map(int, x.split(':')))},
                  names=['Date', 'Time', 'Actual', 'Consensus', 'Previous'])

print(nfp)

yields

        Date      Time  Actual  Consensus  Previous
0 2014-01-10  13:30:00   74000     196000    241000
1 2013-12-06  13:30:00  241000     180000    200000
2 2013-11-08  13:30:00  200000     125000    163000
3 2013-10-22  12:30:00  163000     180000    193000
4 2013-09-06  12:30:00  193000     180000    104000
5 2013-08-02  12:30:00  104000     184000    188000
6 2013-07-05  12:30:00  188000     165000    176000
7 2013-06-07  12:30:00  176000     170000    165000
8 2013-05-03  12:30:00  165000     145000    138000
9 2013-04-05  12:30:00  138000     200000    268000
  1. sep=r'[\s,]' tells read_csv分割 csv 的行 正则表达式模式r'[\s,]'-- 空格或逗号。
  2. The converters参数告诉read_csv应用给定的 某些列的函数。键(例如 0 和 1)指的是 列索引,值是要应用的函数。

如何在执行 csv 读取后拆分 DataFrame

import pandas as pd
nfp = pd.read_csv("NFP.csv", parse_dates=[0], infer_datetime_format=True)
temp = pd.DatetimeIndex(nfp['DateTime'])
nfp['Date'] = temp.date
nfp['Time'] = temp.time
del nfp['DateTime']

print(nfp)

哪个更快?

这取决于 CSV 的大小。 (感谢杰夫指出了这一点。)

对于小型 CSV,直接将 CSV 解析为所需的形式比解析后使用 DatetimeIndex 更快parse_dates=[0]:

def using_converter():
    nfp = pd.read_csv("NFP.csv", sep=r'[\s,]', header=None, skiprows=1,
                      converters={
                          0: lambda x: DT.datetime.strptime(x, '%Y%m%d'),
                          1: lambda x: DT.time(*map(int, x.split(':')))},
                      names=['Date', 'Time', 'Actual', 'Consensus', 'Previous'])
    return nfp

def using_index():
    nfp = pd.read_csv("NFP.csv", parse_dates=[0], infer_datetime_format=True)
    temp = pd.DatetimeIndex(nfp['DateTime'])
    nfp['Date'] = temp.date
    nfp['Time'] = temp.time
    del nfp['DateTime']
    return nfp

In [114]: %timeit using_index()
100 loops, best of 3: 1.71 ms per loop

In [115]: %timeit using_converter()
1000 loops, best of 3: 914 µs per loop

但是,对于只有几百行或更多行的 CSV,使用 DatetimeIndex 速度更快。

N = 20
filename = '/tmp/data'
content = '''\
DateTime,Actual,Consensus,Previous
20140110 13:30:00,74000,196000,241000
20131206 13:30:00,241000,180000,200000
20131108 13:30:00,200000,125000,163000
20131022 12:30:00,163000,180000,193000
20130906 12:30:00,193000,180000,104000
20130802 12:30:00,104000,184000,188000
20130705 12:30:00,188000,165000,176000
20130607 12:30:00,176000,170000,165000
20130503 12:30:00,165000,145000,138000
20130405 12:30:00,138000,200000,268000'''

def setup(n):
    header, remainder = content.split('\n', 1)
    with open(filename, 'w') as f:
        f.write('\n'.join([header]+[remainder]*n))

In [304]: setup(50)

In [305]: %timeit using_converter()
100 loops, best of 3: 9.78 ms per loop

In [306]: %timeit using_index()
100 loops, best of 3: 9.3 ms per loop

我在哪里可以查到此类信息?

  1. 有时您可以在以下位置找到示例熊猫食谱 http://pandas.pydata.org/pandas-docs/stable/cookbook.html.
  2. 有时网络搜索或搜索 Stackoverflow 就足够了。
  3. 周末下雪了,除了看书什么也不做熊猫文档 http://pandas.pydata.org/pandas-docs/stable/index.html肯定也会有所帮助。
  4. Install IPython http://ipython.org/。它具有制表符补全功能,如果您键入?之后 函数,它为您提供函数的文档字符串。这两个特点 确实可以帮助您快速内省 Python 对象。它还告诉您该函数是在哪个文件中定义的(如果是在纯 Python 中定义的)——这让我……
  5. 阅读源代码 https://github.com/pydata/pandas

坚持下去。你知道的越多就越容易。

如果您尽了最大努力仍然找不到答案,请在 Stackoverflow 上发布问题。希望您能很快得到答案,并帮助其他人寻找同样的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pandas 数据框中的 datetime64 列拆分为日期和时间列 的相关文章

  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • cv2.face.mindistancepredictcollector() 错误

    我已经安装了带有额外模块的 opencv 3 1 0 但是当我尝试使用 gt gt gt s cv2 face MinDistancePredictCollector 它返回一个错误 Traceback most recent call l
  • Python中使用cv2获取当前视频播放位置

    我正在尝试使用 CV2 和 Python 从播放视频中获取当前播放时间位置 如果可能 以毫秒为单位 目前我正在使用此示例代码来播放视频文件 import cv2 import numpy as np file name 2 mp4 wind
  • Python 按文件夹模块导入

    我有一个目录结构 example py templates init py a py b py a py and b py只有一个类 名称与文件相同 因为它们是猎豹模板 纯粹出于风格原因 我希望能够在中导入和使用这些类example py像
  • Python 可以使用单独的媒体播放器打开 mp3 文件吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以开一个mp3Python 中的文件 可以使用Popen 我并不是要在程序中运行它 我的意思是作为媒体播放器中的一个单独窗口或其
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • 将数据框列打包到 pandas 中列出

    我需要将 pandas DataFrame 列打包到包含列表的一列中 例子 For gt gt gt df a b c 0 81 88 1 1 42 7 23 2 8 37 63 3 18 22 20 制作列表栏 list col 0 81
  • 为图例中的点设置固定大小

    我正在制作一些散点图 我想将图例中的点的大小设置为固定的相等值 现在我有这个 import matplotlib pyplot as plt import numpy as np def rand data return np random
  • 多线程写入文件

    前几天刚开始使用 python 对多线程的整个概念还很陌生 我在多线程时写入文件时遇到问题 如果我按照常规方式执行此操作 它会不断覆盖正在写入的内容 使用 5 个线程写入文件的正确方法是什么 不降低性能的最佳方法是在所有线程之间使用队列 每
  • 如何替换被测模块的文件访问引用

    pyfakefs https code google com p pyfakefs 听起来非常有用 它 最初是作为核心 Python 模块的一个适度的假实现来开发的 以支持中等复杂的文件系统交互 并于 2006 年 9 月在 Google
  • Python unittest - 与assertRaises相反?

    我想编写一个测试来确定在给定情况下不会引发异常 测试是否有异常很简单is上调 sInvalidPath AlwaysSuppliesAnInvalidPath self assertRaises PathIsNotAValidOne MyO
  • sklearn 中带有词袋和附加情感特征的文本分类器

    我正在尝试构建一个分类器 除了词袋之外 还使用情绪或主题 LDA 结果 等特征 我有一个包含文本和标签的 pandas DataFrame 并且想添加情感值 5 到 5 之间的数字 和 LDA 分析结果 带有句子主题的字符串 我有一个工作词
  • 安排 Asyncio 任务每 X 秒执行一次?

    我正在尝试创建一个 python 不和谐机器人 它将每隔 X 秒检查一次活跃会员 并根据会员的在线时间奖励积分 我正在使用 asyncio 来处理聊天命令 这一切都正常 我的问题是找到一种方法来安排每隔 X 秒异步检查一次活动成员 我已经阅
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出
  • Pandas 替换特定列上的值

    我知道这两个类似的问题 熊猫替换值 https stackoverflow com questions 27117773 pandas replace values Pandas 替换数据框中的列值 https stackoverflow

随机推荐

  • 在 .cshtml 页面中发送和接收数据

    我正在做我的作业 其中我正在 asp net MVC 3 中开发一个购物网站 目前我仅在视图中完成我的工作 我有一个产品页面 单击详细信息后 我必须打开产品详细信息页面 a href ProductDetails cshtml Detail
  • 是否可以在编译时阻止特定基类的多重继承?

    我想要做的是开发两个不同的基类 这两个基类不应在一个派生类中一起继承 有什么方法可以在编译时强制执行此操作吗 class Base1 class Base2 class Derived1 public Base1 OK class Deri
  • 使用 Appium 和 C# 在 Android 模拟器的浏览器中找不到元素

    我想使用 C 和 Appium 在 Android 模拟器上自动化移动网站测试 我想首先自动化一个简单的测试场景 1 启动浏览器2 查找元素3 清除它4 发送密钥 我的第二步有问题 每次 MSTest 尝试执行下面代码中的 FindElem
  • 为什么下面的 Haskell 代码是不确定的?

    我一直在学习 Haskell学习 Haskell http learnyouahaskell com chapters and 刚刚遇到以下声明 http learnyouahaskell com functors applicative
  • 使用 ssl 证书进行 pg_restore

    有人可以帮助我使用 SSL 证书恢复 postgres 数据库吗 我尝试了以下方法 但没有成功 pg restore host hostname user username dbname database name sslcert sslc
  • 如何在bootstrap中将div居中居中?

    我想将 7 个 div 居中 但我不知道该怎么做 任何想法 我不想单独更改所有元素的边距 正如您在图片上看到的那样 与我的按钮相比 div 不居中 并且存在 12 列引导问题
  • iOS ARM64 系统调用

    我正在学习更多关于 shellcode 以及在 iOS 设备上使用 arm64 进行系统调用的知识 我测试的设备是 iPhone 6S 我从此链接获取了系统调用列表 https github com radare radare2 blob
  • 如何强制执行“override”关键字?

    有没有办法强制使用 C 11overrideVisual C 2012 中的关键字 也就是说 如果我忘记说override 然后我想得到警告 错误 C 11几乎有你想要的 原来是override关键字是更大提案的一部分 N2928 http
  • Google Places API 未返回印度的任何结果

    https maps googleapis com maps api place search json location 28 635704 77 224982 radius 50000 types restaurant language
  • SQL Server中删除表和删除表有什么区别?

    在 SQL Server 中 以下两者有什么区别 右键单击数据库对象 表 视图 并选择 删除表 即将表脚本编写为 gt DROP To gt New Query Editor Window 右键单击数据库对象 表 视图 并选择删除 我尝试了
  • Chrome 不缓存 css 文件。缓存适用于 .js/.png 文件。

    我观察到 CSS 文件没有在 Chrome 浏览器上缓存 我的应用程序是由 Angular CLI 构建的 所有必需的缓存控制标头和 Expires 标头均设置为 5 分钟 Accept Ranges bytes Cache Control
  • 在 R 中绘制多行文本框

    我正在使用 R 创建多图布局插图 并且能够在其中一个图中创建多行文本框会很方便 我熟悉使用 Sweave 来组合图像 文本和 R 代码 但是由于各种原因 我需要将其作为在 R 中生成的单页图 因此需要绘制文本框而不是使用 Latex 标记
  • GET_TASKS 权限已弃用

    我有一个使用此权限的安全应用程序 App Locker android permission GET TASKS 在 android Lollipop 中 此权限已被弃用 我希望我的应用程序可以在 21 API 中运行 谁能指导我怎么做 T
  • JPADatabase 的 jooq codegen 无法正常工作

    我在 JPADatabase 中使用 jooq codegen 时遇到问题 我经历过这个post https stackoverflow com questions 42968155 unable to generate jooq clas
  • 如何使用 javascript/jquery 获取具有特定文本的元素的类名称?

    我需要一种 JavaScript 或 jQuery 方法来通过 DIV 元素包含的文本提取 DIV 元素的类名 让我们举例说明 如果我有的话 我们可以说以下代码 div class className UniqueText div 我需要知
  • 用于设置主页功能的通用 JavaScript [重复]

    这个问题在这里已经有答案了 是否有任何适用于几乎所有浏览器的 javascript 将网页设置为主页 我正在使用下面的一种 但它只适用于 i e 和 mozilla var flag false function setHomepage w
  • Scalac 挂在 RegexParser 的阶段类型上

    我有一个 scala 程序 其中有一个解析器组合器 这是通过扩展来完成的scala util parsing combinator RegexParsers 我使用 Scala 2 10 开发它 一切正常 昨天我将系统升级到了 Scala
  • 播放前检测浏览器/设备是否可以内嵌播放 HTML5 视频

    我知道我可以检查一下navigator userAgent如果设备是 iPhone 但还有其他设备 其中一些我不知道哪些设备会在其自己的播放器中播放视频 可以列出所有不内联播放视频的浏览器 设备 但我想知道是否还有其他解决方案 JavaSc
  • 创建 iOS 应用程序 (Xcode) 时,如何关闭自动图标“凝胶”

    有没有办法去掉创建 iPhone 应用程序时自动添加到图标的突出显示 或者我必须在 PS 中手动补偿 Thanks Set UIPrerenderedIcon to YES在你的 Info plist 中 欲了解更多信息 请参阅 信息属性列
  • 将 pandas 数据框中的 datetime64 列拆分为日期和时间列

    如果我有一个数据框 第一列是 datetime64 列 如何将此列拆分为 2 个新列 日期列和时间列 这是到目前为止我的数据和代码 DateTime Actual Consensus Previous 20140110 13 30 00 7