【问题标题】:Python - Combining Month, Day, Year into Date ColumnPython - 将月、日、年组合成日期列
【发布时间】:2018-10-09 15:00:58
【问题描述】:

我正在尝试从年、月和日的多个列创建日期列,但是使用创建日期列的标准过程会出现一些错误。

import pandas as pd
from urllib.request import urlopen

url = "https://www.ndbc.noaa.gov/view_text_file.php?filename=42887h2017.txt.gz&dir=data/historical/stdmet/"
data_csv = urlopen(url)
df = pd.read_csv(data_csv, delim_whitespace=True, index_col=0, parse_dates=True)

#Reset Index
df.reset_index(level=0, inplace=True)

#remove 1st row contains erronous characters
df = df.iloc[1:]

#Rename Year column
df = df.rename(columns={'#YY': 'YY'})

df['Date'] = pd.to_datetime((df.YY*10000+df.MM*100+df.DD).apply(str),format='%Y%m%d') 

最后一个命令不能正常工作,因为没有创建日期列。结果:

value eRror:不转换数据剩余:4201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420142014201420420142042042042042042042042042042042042转。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    pd.to_datetime 可以自动解析多个列中的日期,如果它们被正确命名('year', 'month', 'day', 'hour', 'minute'

    pd.to_datetime(df[['YY', 'MM', 'DD']].rename(columns={'YY': 'year', 'MM': 'month', 'DD': 'day'}))
    

    输出:

    1      2017-01-02
    2      2017-01-02
    3      2017-01-02
    4      2017-01-02
    5      2017-01-02
    ...
    2427   2017-03-05
    2428   2017-03-05
    2429   2017-03-05
    2430   2017-03-05
    

    您还可以添加小时和分钟:

    pd.to_datetime(df[['YY', 'MM', 'DD', 'hh', 'mm']].rename(
                    columns={'YY': 'year', 'MM': 'month', 'DD': 'day',
                             'hh': 'hour', 'mm': 'minute'}))
    #1      2017-01-02 06:00:00
    #2      2017-01-02 06:20:00
    #...
    #2429   2017-03-05 01:40:00
    #2430   2017-03-05 02:00:00
    

    【讨论】:

    • 嗨,我继续收到此错误(添加小时和分钟时):ValueError: cannot assemble the datetimes [hour]: data type "datetime" not understood。是因为我用的是Python3吗?
    • @Starbucks,我相信这是numpypandas 的特定组合的问题。这似乎在较新的版本中得到修复。你运行的是什么版本的numpypandas?你能更新吗?
    • 两者都是最新的。 numpy 1.15.2 和 pandas 0.23.4
    • 您对小时列进行了更改吗? df.dtypes['hh'] 是什么?
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 2022-07-22
    • 2021-11-17
    • 1970-01-01
    • 2019-07-11
    • 2019-02-20
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多