1

時間 (時と分) と IP アドレスを含むテキスト ファイルを読み込んでいます。次に、時差を取得し、5 分ごとに何らかのアクティビティを実行したいと考えています。次のコードは時差を計算しません。

サンプル テキスト ファイル:

06:03 65.55.215.62
06:04 157.56.92.152
06:04 66.249.74.175
06:05 173.199.116.171

コード:

time_ip = []
for line in open('minutes'):
    time_ip.append(line.split(' '))    

df = pandas.DataFrame(time_ip)
df['tvalue'] = df[0]
df['delta'] = (df['tvalue']-df['tvalue'])
4

3 に答える 3

1

read_csvcsv を DataFrame に読み込むために使用する必要があります。

In [1]: df = pd.read_csv(file_name, sep='\s+', header=None, names=['time', 'ip'])

In [2]: df
Out[2]:
    time               ip
0  06:03     65.55.215.62
1  06:04    157.56.92.152
2  06:04    66.249.74.175
3  06:05  173.199.116.171

Pandas には (まだ) 組み込みの時間オブジェクトがなく、Python でこれを行うのは簡単ではありません...時間オブジェクトの時間列を作成できます。

In [3]: df['time'] = df['time'].apply(lambda x: datetime.time(*map(int, x.split(':'))))

In [4]: df
Out[4]:
       time               ip
0  06:03:00     65.55.215.62
1  06:04:00    157.56.92.152
2  06:04:00    66.249.74.175
3  06:05:00  173.199.116.171

特に、 datetime.time オブジェクトに対して算術演算を実行できないためです。いずれにせよ、ここにも年月日がないと厄介な状況になると思いますが、一つには、真夜中の対処法は?

では、日時があると仮定して、もう一度始めましょう...

In [5]: df = pd.read_csv(file_name, sep='\s+', header=None, names=['time', 'ip'])

In [6]: df['time'] = pd.to_datetime(df['time'])  # let's use todays

In [7]: df
Out[7]:
                 time               ip
0 2013-06-12 06:03:00     65.55.215.62
1 2013-06-12 06:04:00    157.56.92.152
2 2013-06-12 06:04:00    66.249.74.175
3 2013-06-12 06:05:00  173.199.116.171

次に、次を使用して違いを取得できますshift

In [8]: df['time'].shift()
Out[8]:
0                   NaT
1   2013-06-12 06:03:00
2   2013-06-12 06:04:00
3   2013-06-12 06:04:00
Name: time, dtype: datetime64[ns]

In [9]: d['time'] - df['time'].shift()
Out[9]:
0        NaT
1   00:01:00
2   00:00:00
3   00:01:00
Name: time, dtype: timedelta64[ns]

はるかに簡単です。:)

于 2013-06-12T07:49:20.653 に答える