1. 程式人生 > >『Python學習』pandas進階學習筆記

『Python學習』pandas進階學習筆記

Pandas資料分析基礎

http://blog.csdn.net/cbbing/article/details/50721468

1、

# 輸出系統當前時間
now = datetime.now()
print now
print now.day
print now.weekday()    # 有疑問  為何比真實時間晚一天?是因為時區問題?

2、
from datetime import date, time

print time(3, 24)    # 3時24分

3、"strptime" 方法可以根據需求形式解析用字串表示的日期或時間欄位。
test_time = "2/20/09 16:03"
print datetime.strptime(test_time, "%m/%d/%y %H:%M")      # 必須嚴格對照原格式, 感覺很不實用

4、事實證明 "dateutil" 庫中的日期解析器要遠比 "strptime" 要強大得多

from dateutil.parser import parse

test_time_1 = "2/20/09 16:03"
test_time_2 = "2009/2/20 16:03:01"
test_time_3 = "2009-2-20 16:03:01"
test_time_4 = "2009-2/20 16:03:01"

print parse(test_time_1)
print parse(test_time_2)
print parse(test_time_3)
print parse(test_time_4)
 # 輸出結果
2009-02-20 16:03:00
2009-02-20 16:03:01
2009-02-20 16:03:01
2009-02-20 16:03:01

5、為了簡單起見,Pandas提供了“to_datetime”方法來識別字符串形式的一整個序列,並將其轉換為“datetime”物件。

file = pd.read_csv(path)
print pd.to_datetime(file.time)
print pd.to_datetime([None])
注:Pandas 中對於時間型別的缺失值有一個特定的值,“NaT”

6、

file = pd.read_csv(path, index_col=None)
#print file.number    # 報錯沒有 number 屬性?是因為使用它來作為 index_col 了?當 index_col 設定為 None 時可以正常輸出
print file.time

7、unique 輸出序列的元素,且重複值只輸出一次(即去重)

8、merge: 將兩個 DataFrame 物件按鍵(key)合併
merge的引數形式如下: 

pd.merge(left, right, how='inner', on=None, left_on=None, 

                      right_on=None, left_index=False,right_index=False, 

                             sort=False, suffixes=('_x', '_y'), copy=True, indicator=False) 

其中 : left : 資料框,right : 資料框 how : {'left', 'right', 'outer', 'inner'}, 預設值為 'inner'
* left: 只使用left資料框的鍵值 

* right: 只使用right資料框的鍵值

* outer: 使用兩個資料框鍵值的並集

* inner: 使用兩個資料框鍵值的交集

# 當兩個資料框有一個共同的列名時, 預設以該列的值作為合併時的鍵值
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test3=range(20, 26)))
print pd.merge(df1, df2)          # 預設以兩個資料框的鍵值的交集為鍵值

# 輸出結果
 test1  test2  test3
0      0     10     20
1      0     10     23
2      1     11     21
3      1     11     24
4      2     12     22
5      2     12     25
# 由於 merge 預設以兩個資料框的鍵值的交集為鍵值, 故當交集為空時, 合併後的資料框也為空
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(10, 13) * 2, test3=range(20, 26)))
print pd.merge(df1, df2)          # 預設以兩個資料框的鍵值的交集為鍵值

# 輸出結果
Columns: [test1, test2, test3]
Index: []
# 當兩個資料框有一個共同的列名時, 預設以該列的值作為合併時的鍵值
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test3=range(20, 26)))
print pd.merge(df1, df2, how="outer")          # 以兩個資料框的鍵值的並集為鍵值

# 輸出結果
 test1  test2  test3
0      0     10   20.0
1      0     10   23.0
2      1     11   21.0
3      1     11   24.0
4      2     12   22.0
5      2     12   25.0
6      3     13    NaN


on: 取值為標籤或列表 取值即為合併的欄位,要求必須同時存在與被合併的資料框,如果取值為None,並且不按照索引合併時,函式就預設按照列的交集合並。
# 當兩個資料框有多個相同的列名時, 沒被選擇作為鍵的列名將會被系統標記為不同的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on="test1")          # 以 test1 為鍵

# 輸出結果
test1  test2_x  test2_y  test3
0      0       10       10     20
1      0       10       13     23
2      1       11       11     21
3      1       11       14     24
4      2       12       12     22
5      2       12       15     25
# 當兩個資料框有多個相同的列名時, 沒被選擇作為鍵的列名將會被系統標記為不同的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on="test2")          # 以 test2 為鍵

# 輸出結果
 test1_x  test2  test1_y  test3
0        0     10        0     20
1        1     11        1     21
2        2     12        2     22
3        3     13        0     23

# 當兩個資料框有多個相同的列名時, 可以選擇多個列名作為鍵
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, on=["test1", "test2"])          # 以 test1, test2 為鍵

# 輸出結果
 test1  test2  test3
0      0     10     20
1      1     11     21
2      2     12     22

left(right)_on: 取值為標籤或列表或陣列形式 left(right)資料框中用來合併的欄位,可以是同資料框長度的向量或者向量列表,被用 來作為特別指定的合併鍵值。 

# 指定兩個資料框中各自用於合併的列名
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, left_on="test1", right_on="test1")          # 以 "test1" 為鍵

# 輸出結果
test1  test2_x  test2_y  test3
0      0       10       10     20
1      0       10       13     23
2      1       11       11     21
3      1       11       14     24
4      2       12       12     22
5      2       12       15     25


left(right)_index:取值為布林值,預設為False 使用left(right)資料框的索引作為合併鍵值,如果是多重索引,另一個數據框中鍵值的 數目必須和索引的層級相符。

# 以行索引為鍵
df1 = pd.DataFrame(dict(test1=range(4), test2=range(10, 14)))
df2 = pd.DataFrame(dict(test1=range(3) * 2, test2=range(10, 16), test3=range(20, 26)))
print pd.merge(df1, df2, left_index=True, right_index=True)          # 以行索引為鍵

# 輸出結果
test1_x  test2_x  test1_y  test2_y  test3
0        0       10        0       10     20
1        1       11        1       11     21
2        2       12        2       12     22
3        3       13        0       13     23

9、聯結 Concatenation

向一個已經固定行和列的資料集中分別新增行和列

10、data.dtypes 可以知道各個列的屬性