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

在pandas数据框中将datetime64列拆分为日期和时间列,第1张

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

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

函数字典传递给

pandas.read_csv
converters
关键字参数:

import pandas as pdimport datetime as DTnfp = pd.read_csv("NFP.csv",        sep=r'[s,]',   # 1       header=None, skiprows=1,       converters={    # 20: 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)

产量

        Date      Time  Actual  Consensus  Previous0 2014-01-10  13:30:00   74000     196000    2410001 2013-12-06  13:30:00  241000     180000    2000002 2013-11-08  13:30:00  200000     125000    1630003 2013-10-22  12:30:00  163000     180000    1930004 2013-09-06  12:30:00  193000     180000    1040005 2013-08-02  12:30:00  104000     184000    1880006 2013-07-05  12:30:00  188000     165000    1760007 2013-06-07  12:30:00  176000     170000    1650008 2013-05-03  12:30:00  165000     145000    1380009 2013-04-05  12:30:00  138000     200000    268000
  1. sep=r'[s,]'
    告诉
    read_csv
    您在正则表达式模式下将csv的行拆分
    r'[s,]'
    -空格或逗号。
  2. converters
    参数告诉
    read_csv
    您将给定功能应用于某些列。键(例如0和1)引用列索引,并且值是要应用的功能。

执行csv_read后如何拆分Dataframe

import pandas as pdnfp = pd.read_csv("NFP.csv", parse_dates=[0], infer_datetime_format=True)temp = pd.DatetimeIndex(nfp['DateTime'])nfp['Date'] = temp.datenfp['Time'] = temp.timedel nfp['DateTime']print(nfp)

哪个更快?

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

对于小型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 nfpdef 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 nfpIn [114]: %timeit using_index()100 loops, best of 3: 1.71 ms per loopIn [115]: %timeit using_converter()1000 loops, best of 3: 914 µs per loop

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

N = 20filename = '/tmp/data'content = '''DateTime,Actual,Consensus,Previous20140110 13:30:00,74000,196000,24100020131206 13:30:00,241000,180000,20000020131108 13:30:00,200000,125000,16300020131022 12:30:00,163000,180000,19300020130906 12:30:00,193000,180000,10400020130802 12:30:00,104000,184000,18800020130705 12:30:00,188000,165000,17600020130607 12:30:00,176000,170000,16500020130503 12:30:00,165000,145000,13800020130405 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 loopIn [306]: %timeit using_index()100 loops, best of 3: 9.3 ms per loop

我在哪里可以找到这类信息?

  1. 有时您可以在《熊猫食谱》中找到示例。
  2. 有时,通过网络搜索或搜索Stackoverflow就足够了。
  3. 度过一个漫长的周末,无所事事,但阅读 熊猫文档当然也将有所帮助。
  4. 安装IPython。它具有制表符补全,如果您
    ?
    在函数后键入a ,它将为您提供函数的文档字符串。这两个功能确实可以帮助您快速自检Python对象。它还告诉您函数在哪个文件中定义(如果在纯Python中定义)-导致我…
  5. 阅读源代码

保持它。您越了解,它越容易获得。

如果您尽力而为,但仍然找不到答案,请在Stackoverflow上发布问题。希望您会很快得到答案,并帮助其他人搜索相同的内容。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存