原文:chapter 8
import pandas as pd
在 pandas 中處理 unix 時間戳不是很容易 - 我花了相當長的時間來解決這個問題。 我們在這裡使用的檔案是乙個軟體包流行度檔案,我在我的系統上的/var/log/popularity-contest
找到的。
這裡解釋了這個檔案是什麼。
# read it, and
remove the last row
popcon = pd.read_csv('../data/popularity-contest', sep=' ', )[:-1]
popcon.columns = ['atime', 'ctime', 'package-name', 'mru-program', 'tag']
列是訪問時間,建立時間,包名稱最近使用的程式,以及標籤。
popcon
[:5]
atime
ctime
package-name
mru-program
tag0
1387295797
1367633260
perl-base
/usr/bin/perl
11387295796
1354370480
login
/bin/su
21387295743
1354341275
libtalloc2
/usr/lib/x86_64-linux-gnu/libtalloc.so.2.0.7
31387295743
1387224204
libwbclient0
/usr/lib/x86_64-linux-gnu/libwbclient.so.0
41387295742
1354341253
libselinux1
/lib/x86_64-linux-gnu/libselinux.so.1
pandas 中的時間戳解析的神奇部分是 numpydatetime
已經儲存為 unix 時間戳。 所以我們需要做的是告訴 pandas 這些整數實際上是資料時間 - 它不需要做任何轉換。
我們需要首先將這些轉換為整數:
popcon['atime'] = popcon['atime'].astype(int)
popcon['ctime'] = popcon['ctime'].astype(int)
每個 numpy 陣列和 pandas 序列都有乙個dtype
- 這通常是int64
,float64
或object
。 一些可用的時間型別是datetime64
[s],datetime64
[ms]和datetime64
[us]。 與之相似,也有timedelta
型別。
我們可以使用pd.to_datetime
函式將我們的整數時間戳轉換為datetimes
。 這是乙個常量時間操作 - 我們實際上並不改變任何資料,只是改變了 pandas 如何看待它。
popcon['atime'] = pd.to_datetime(popcon['atime'], unit='s')
popcon['ctime'] = pd.to_datetime(popcon['ctime'], unit='s')
如果我們現在檢視dtype
,它是'atime'].dtype
dtype(')
所以現在我們將atime
和ctime
看做時間了。
popcon
[:5]
atime
ctime
package-name
mru-program
tag0
2013-12-17 15:56:37
2013-05-04 02:07:40
perl-base
/usr/bin/perl
12013-12-17 15:56:36
2012-12-01 14:01:20
login
/bin/su
22013-12-17 15:55:43
2012-12-01 05:54:35
libtalloc2
/usr/lib/x86_64-linux-gnu/libtalloc.so.2.0.7
32013-12-17 15:55:43
2013-12-16 20:03:24
libwbclient0
/usr/lib/x86_64-linux-gnu/libwbclient.so.0
42013-12-17 15:55:42
2012-12-01 05:54:13
libselinux1
/lib/x86_64-linux-gnu/libselinux.so.1
現在假設我們要檢視所有不是庫的軟體包。
首先,我想去掉一切帶有時間戳 0 的東西。注意,我們可以在這個比較中使用乙個字串,即使它實際上在裡面是乙個時間戳。這是因為 pandas 是非常厲害的。
popcon = popcon[popcon['atime'] > '1970-01-01']
現在我們可以使用 pandas 的魔法字串功能來檢視包名稱不包含lib
的行。
nonlibraries = popcon[~popcon['package-name'].str.contains('lib')]
nonlibraries.sort('ctime', ascending=false)[:10]
atime
ctime
package-name
mru-program
tag57
2013-12-17 04:55:39
2013-12-17 04:55:42
ddd/usr/bin/ddd
4502013-12-16 20:03:20
2013-12-16 20:05:13
nodejs
/usr/bin/npm
4542013-12-16 20:03:20
2013-12-16 20:05:04
switchboard-plug-keyboard
/usr/lib/plugs/pantheon/keyboard/options.txt
4452013-12-16 20:03:20
2013-12-16 20:05:04
thunderbird-locale-en
/usr/lib/thunderbird-addons/extensions/langpac…
3962013-12-16 20:08:27
2013-12-16 20:05:03
software-center
/usr/sbin/update-software-center
4492013-12-16 20:03:20
2013-12-16 20:05:00
samba-common-bin
/usr/bin/net.samba3
3972013-12-16 20:08:25
2013-12-16 20:04:59
postgresql-client-9.1
/usr/lib/postgresql/9.1/bin/psql
3982013-12-16 20:08:23
2013-12-16 20:04:58
postgresql-9.1
/usr/lib/postgresql/9.1/bin/postmaster
4522013-12-16 20:03:20
2013-12-16 20:04:55
php5-dev
/usr/include/php5/main/snprintf.h
4402013-12-16 20:03:20
2013-12-16 20:04:54
php-pear
/usr/share/php/xml/util.php
好吧,很酷,它說我最近安裝了ddd
。 和postgresql
! 我記得安裝這些東西。
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...
第八章 字典
d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...