2015-08-20 77 views
0

我有一個CSV文件,其中一個冒號值是時間戳,但是當我使用numpy.getfromtxt時,它將其更改爲字符串。我的目標是創建一個圖形,但以正常的時間格式,我只喜歡秒。Python 2.7 CSV圖形時間格式

這是我的數組,我從婁代碼得到:

array([('0:00:00',), ('0:00:00.001000',), ('0:00:00.002000',), 
('0:00:00.081000',), ('0:00:00.095000',), ('0:00:00.195000',), 
('0:00:00.294000',), ... 

這是我的代碼:

col1 = numpy.genfromtxt("mycsv.csv",usecols=(1),delimiter=',',dtype=None, names=True) 

,我有這種格式的問題是字符串,但我需要它秒(我們可以忽略不計)。我怎樣才能達到目的?

+0

你的問題是什麼? – scytale

+0

如何將字符串格式更改爲秒 – alphiii

+0

請更新您的問題。 – scytale

回答

1

如果可以的話,最好的辦法在蟒蛇與csv文件之一是使用pandas。它爲你照顧這件事。我將承擔時間列的名稱爲time,改變它,無論你使用:

>>> import numpy as np 
>>> import pandas as pd 
>>> 
>>> df = pd.read_csv('test.csv', parse_dates=[1]) # read time as date 
>>> print(df) 
    test1     time test2 test3 
0  5 2015-08-20 00:00:00.000  10 11.7 
1  5 2015-08-20 00:00:00.001  11 11.6 
2  5 2015-08-20 00:00:00.002  12 11.5 
3  5 2015-08-20 00:00:00.081  13 11.4 
4  5 2015-08-20 00:00:00.095  14 11.3 
5  5 2015-08-20 00:00:00.195  15 11.2 
6  5 2015-08-20 00:00:00.294  16 11.1 
>>> df['time'] -= pd.datetime.now().date() # convert to timedelta 
>>> print(df) 
    test1   time test2 test3 
0  5  00:00:00  10 11.7 
1  5 00:00:00.001000  11 11.6 
2  5 00:00:00.002000  12 11.5 
3  5 00:00:00.081000  13 11.4 
4  5 00:00:00.095000  14 11.3 
5  5 00:00:00.195000  15 11.2 
6  5 00:00:00.294000  16 11.1 
>>> df['time'] /= np.timedelta64(1,'s') # convert to seconds 
>>> print(df)  
    test1 time test2 test3 
0  5 0.000  10 11.7 
1  5 0.001  11 11.6 
2  5 0.002  12 11.5 
3  5 0.081  13 11.4 
4  5 0.095  14 11.3 
5  5 0.195  15 11.2 
6  5 0.294  16 11.1 

你可以用大熊貓dataframes工作(你有什麼在這裏)和系列(你會從獲得一列,如df['time'])與numpy數組大部分相同,包括繪圖。但是,如果您確實需要將其轉換爲一個numpy數組,那麼它就像arr = df['time'].values一樣簡單。

+0

這個模塊熊貓真棒。謝謝! – alphiii

1

使用datetime

import datetime 

for x in array: 
    for y .... # it's not realy obvious what the nesting is here... 
     timestamp = datetime.strptime(y, '%H:%M:%S.%f') 
+0

是的......但我需要它作爲numpy對象 – alphiii

+0

你知道,如果你問清楚的問題,你會得到一個很好的答案更快 – scytale

+0

嘗試閱讀numpy文檔:http:// docs。 scipy.org/doc/numpy/reference/arrays.datetime.html – scytale

1

您可以使用轉換器作爲時間戳字段。

例如,假設times.dat包含:

time 
0:00:00 
0:00:00.001000 
0:00:00.002000 
0:00:00.081000 
0:00:00.095000 
0:00:00.195000 
0:00:00.294000 

定義一個時間戳字符串轉換成以浮點值的秒數的轉換器:

In [5]: def convert_timestamp(s): 
    ...:  h, m, s = [float(w) for w in s.split(':')] 
    ...:  return h*3600 + m*60 + s 
    ...: 

然後使用轉換器在genfromtxt

In [21]: genfromtxt('times.dat', skiprows=1, converters={0: convert_timestamp}) 
Out[21]: array([ 0. , 0.001, 0.002, 0.081, 0.095, 0.195, 0.294])