2013-07-20 4 views
2

Я использую Pandas 0.11 на Mac OS X. Я пытаюсь импортировать файл csv с pandas read_csv, один из столбцов в файле - это полная метка времени со значениями, такими как:Предотвращение Pandas read_csv от усечения полной временной отметки

fullts 
1374087067.357464 
1374087067.256206 
1374087067.158231 
1374087067.074162 

Я заинтересован в том, чтобы разница во времени между последующими отметками времени, поэтому я импортировать его с указанием dtype:

data = read_csv(fn, dtype={'fullts': float64}) 

однако, панды, кажется, усечь число его целой части:

data.fullts.head(4) 

выходы:

1374087067 
1374087067 
1374087067 
1374087067 

Любые предложения?

Спасибо!

Добавлено: пытались использовать pd.to_datetime как было предложено, и получить эту ошибку:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-8-37ed0da45608> in <module>() 
---> 1 pd.to_datetime(sd1.fullts) 

/Users/user/anaconda/lib/python2.7/site-packages/pandas-0.11.0-py2.7-macosx-10.5-x86_64.egg/pandas/tseries/tools.pyc in to_datetime(arg, errors, dayfirst, utc, box, format) 
    102   values = arg.values 
    103   if not com.is_datetime64_dtype(values): 
--> 104    values = _convert_f(values) 
    105   return Series(values, index=arg.index, name=arg.name) 
    106  elif isinstance(arg, (np.ndarray, list)): 

/Users/user/anaconda/lib/python2.7/site-packages/pandas-0.11.0-py2.7-macosx-10.5-x86_64.egg/pandas/tseries/tools.pyc in _convert_f(arg) 
    84    else: 
    85     result = tslib.array_to_datetime(arg, raise_=errors == 'raise', 
---> 86             utc=utc, dayfirst=dayfirst) 
    87    if com.is_datetime64_dtype(result) and box: 
    88     result = DatetimeIndex(result, tz='utc' if utc else None) 
/Users/user/anaconda/lib/python2.7/site-packages/pandas-0.11.0-py2.7-macosx-10.5-x86_64.egg/pandas/tslib.so in pandas.tslib.array_to_datetime (pandas/tslib.c:15411)() 

TypeError: object of type 'float' has no len() 
+1

It отлично работает на моем компьютере, какую версию панды вы используете? – waitingkuo

+0

Я использую pandas 0.11 с anaconda python на MAC OS X Lion – Fra

ответ

2

Вам не нужно указать DTYPE при чтении из CSV (он должен использовать float64 по умолчанию).

В панде 0.12 вы можете затем скрытые столбцы целых или поплавки (времен эпохи) в панд отметку время, используя единичный аргумент to_datetime:

In [11]: df 
Out[11]: 
     fullts 
0 1.374087e+09 
1 1.374087e+09 
2 1.374087e+09 
3 1.374087e+09 

In [12]: pd.to_datetime(df.fullts) # default unit is ns 
Out[12]: 
0 1970-01-01 00:00:01.374087067 
1 1970-01-01 00:00:01.374087067 
2 1970-01-01 00:00:01.374087067 
3 1970-01-01 00:00:01.374087067 
Name: fullts, dtype: datetime64[ns] 

In [13]: pd.to_datetime(df.fullts, unit='s') 
Out[13]: 
0 2013-07-17 18:51:07.357464 
1 2013-07-17 18:51:07.256206 
2 2013-07-17 18:51:07.158231 
3 2013-07-17 18:51:07.074162 
Name: fullts, dtype: datetime64[ns] 

Если состояние строки документации:

unit : unit of the arg (D,s,ms,us,ns) denote the unit in epoch
              (e.g. a unix timestamp), which is an integer/float number

+0

эй Энди, спасибо за ответ. вы считаете, что проблема в том, что у меня установлен Pandas 0.11? – Fra

+0

@Fra в 0.11 это не принимает значения float (но я думаю, что он принимает ints, поэтому либо умножьте его на наносекунду int, либо подождите 0.12 - out v скоро :)) –

+0

Pandas 0.12 вышел, отлично работает. благодаря – Fra

Смежные вопросы