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

日期分析器和读取csv的函数不起作用

  •  1
  • zipline86  · 技术社区  · 8 年前

    数据集1

    555, 1404803485, 800

    555, 1408906759, 900

    数据集2

    2311404803485,通过

    数据集3

    16010925, 1403890894, 40.5819880696

    def dateparse(time_in_secs):
    
    if isinstance(time_in_secs, str):
        if time_in_secs == '\\N':
            time_in_secs = 0
    
    tm = datetime.datetime.fromtimestamp(float(time_in_secs))
    tm = tm - datetime.timedelta(
        minutes=tm.minute % 10, seconds=tm.second, microseconds=tm.microsecond)
    return tm
    
    
    pd.read_csv('dataset_here.csv',
               delimiter=',', index_col=[0,1], parse_dates=['Timestamp'], 
                    date_parser=dateparse, names=['Serial', 'Timestamp', 'result'])
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    8 年前

    我相信我们需要把时间 0 对于所有字符串,对于 float 您的解决方案是否有效:

    def dateparse(time_in_secs):
    
        if isinstance(time_in_secs, str):
            #https://stackoverflow.com/a/45372194
            #time_in_secs = 86400
            time_in_secs = 0
    
        #print (time_in_secs)
        tm = datetime.datetime.fromtimestamp(float(time_in_secs))
        tm = tm - datetime.timedelta(
        minutes=tm.minute % 10, seconds=tm.second, microseconds=tm.microsecond)
        return tm
    

    def dateparse(time_in_secs):
    
        if isinstance(time_in_secs, str):
            try:
                time_in_secs = float(time_in_secs)
            except ValueError:
                #https://stackoverflow.com/a/45372194
                #time_in_secs = 86400
                time_in_secs = 0
    
        #print (time_in_secs)
        tm = datetime.datetime.fromtimestamp(float(time_in_secs))
        tm = tm - datetime.timedelta(
        minutes=tm.minute % 10, seconds=tm.second, microseconds=tm.microsecond)
        return tm
    

    样品

    import pandas as pd
    import datetime
    
    def dateparse(time_in_secs):
    
        if isinstance(time_in_secs, str):
            try:
                time_in_secs = float(time_in_secs)
            except ValueError:
                #https://stackoverflow.com/a/45372194
                #time_in_secs = 0
                time_in_secs = 86400
    
        print (time_in_secs)
        tm = datetime.datetime.fromtimestamp(float(time_in_secs))
        tm = tm - datetime.timedelta(
        minutes=tm.minute % 10, seconds=tm.second, microseconds=tm.microsecond)
        return tm
    
    temp=u"""16010925,test,40.5819880696
    16010925,1903929273,40.5819880696"""
    #after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
    df = pd.read_csv(pd.compat.StringIO(temp), index_col=[0,1], parse_dates=['Timestamp'], 
                    date_parser=dateparse, names=['Serial', 'Timestamp', 'result'])
    
    print (df)
                                     result
    Serial   Timestamp                     
    16010925 1970-01-02 01:00:00  40.581988
             2030-05-02 07:10:00  40.581988
    
    print (df.index.get_level_values(1))
    DatetimeIndex(['1970-01-02 01:00:00', '2030-05-02 07:10:00'], 
                  dtype='datetime64[ns]', name='Timestamp', freq=None)