您應該使用read_csv
讀取CSV到數據幀:
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
大熊貓沒有(還)有任何內置的時間對象,並在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
這不僅是因爲你不能這樣做arithmetic on datetime.time objects。無論如何,我想你會因爲在這裏沒有年/月/日而陷入困境,一方面,如何處理午夜?
因此,讓我們重新開始,假設你有一個日期時間...
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]
容易得多。 :)
'df ['tvalue'] - df ['tvalue']'== 0,如果'df [0]'是一個數字。 – Elazar
http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-deltas這裏有一些說明 –
@Elazar IT給出了同樣的錯誤... TypeError:不支持的操作數類型爲 - : 'str'和'str' –