パンダを使用してタイムスタンプ列を含む csv を読み込む 質問する

パンダを使用してタイムスタンプ列を含む csv を読み込む 質問する

行う場合:

import pandas
x = pandas.read_csv('data.csv', parse_dates=True, index_col='DateTime', 
                                names=['DateTime', 'X'], header=None, sep=';')

このdata.csvファイルで:

1449054136.83;15.31
1449054137.43;16.19
1449054138.04;19.22
1449054138.65;15.12
1449054139.25;13.12

(最初の列は UNIX タイムスタンプ、つまり 1970 年 1 月 1 日から経過した秒数です)、次のように 15 秒ごとにデータを再サンプリングすると、次のエラーが発生しますx.resample('15S')

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex

「datetime」情報が解析されていないようです:

                 X
DateTime      
1.449054e+09  15.31                
1.449054e+09  16.19
...

pandas モジュールを使用して、日付がタイムスタンプとして保存された .CSV をインポートするにはどうすればよいですか?

CSVをインポートできるようになると、日付の行にアクセスする方法 > 2015-12-02 12:02:18?

ベストアンサー1

を使用しto_datetime、渡すことunit='s'で単位を Unix タイムスタンプとして解析すると、はるかに高速になります。

In [7]:
pd.to_datetime(df.index, unit='s')

Out[7]:
DatetimeIndex(['2015-12-02 11:02:16.830000', '2015-12-02 11:02:17.430000',
               '2015-12-02 11:02:18.040000', '2015-12-02 11:02:18.650000',
               '2015-12-02 11:02:19.250000'],
              dtype='datetime64[ns]', name=0, freq=None)

タイミング:

In [9]:

import time
%%timeit
import time
def date_parser(string_list):
    return [time.ctime(float(x)) for x in string_list]
df = pd.read_csv(io.StringIO(t), parse_dates=[0],  sep=';', 
                 date_parser=date_parser, 
                 index_col='DateTime', 
                 names=['DateTime', 'X'], header=None)
100 loops, best of 3: 4.07 ms per loop

そして

In [12]:
%%timeit
t="""1449054136.83;15.31
1449054137.43;16.19
1449054138.04;19.22
1449054138.65;15.12
1449054139.25;13.12"""
df = pd.read_csv(io.StringIO(t), header=None, sep=';', index_col=[0])
df.index = pd.to_datetime(df.index, unit='s')
100 loops, best of 3: 1.69 ms per loop

したがって、to_datetimeこの小さなデータセットでは2倍以上高速であり、他の方法よりもはるかに優れたスケーリングが期待できます。

おすすめ記事