代码之家  ›  专栏  ›  技术社区  ›  Starbucks

Python-将月、日、年组合到日期列中

  •  2
  • Starbucks  · 技术社区  · 6 年前

    我试图从多个列Year、Month和Day创建一个Date列,但是使用创建Date列的标准过程时出现了一些错误。

    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') 
    

    ValueError:未转换的数据仍然存在:420142014204014204014204014204014204204014204014204204014204204014204204014204204014204204014204204014204014204014204204014204014204204014204014204204014204204014201

    1 回复  |  直到 6 年前
        1
  •  5
  •   ALollz    6 年前

    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