1. 程式人生 > >Python data science two pandas basic

Python data science two pandas basic

from pandas import Series
import pandas as pd
s=Series([1,2,'ww','tt'])
s

#series可以自定義索引
s2=Series(['wangxing','man',24],index=['name','sex','age'])
#可以重新賦值
s2['name']='wudadiao'
s2['wife']=None
##類似於dict字典
info={
    'name':'無大招',
    'age':24,
    'gender':'man'
}
s3=Series(info)
s3.isnull()判斷是否為空
#對於索引的名字是可以重新定義的
s3.index=['a','b','c',"D"]
s3
#但是要對於所有的索引重新賦值
#dataframe是一種二維陣列的資料結構,可以通過column和index來確定它的值
from pandas import Series,DataFrame
data={"name":['goole','baidu','sogou'],"marks":[1,2,3],"price":[3,2,1]}
f1=DataFrame(data)

f2=DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
f2#索引也能夠自定義
new_data={'name':{'first':'Python','second':'Java'},'marks':{'first':1,'second':2}}
f3=DataFrame(new_data)
f3#使用字典套字典的形式將索引給進去
f3['name']#使用索引指定不了行???,就是隻能對列進行操作,擷取的時候只能前幾行
f3.head(1)#對行進項操作的時候能進行操作
f3['name']['first'] #col index進行指定,也就是說列名col比較高的意思

總結:

------資料檢視----------
# 檢視前5行,5為數目,不是索引,預設為5
data.head()
# 檢視最後6行,6為數目,不是索引,預設為5
data.tail(6)
# 檢視資料的形狀
data.shape
# 檢視資料的列數,0為行1位列
data.shape[1]
# 檢視所有的列名
data.columns
# 檢視索引
data.index
# 檢視每一列資料的型別
data.dtypes
# 檢視資料的維度
data.ndim
--------------資料索引-----------------
# 取出單獨某一列
X = data['X']
# 取出多列
XY = data[['X','Y']]
# 取出某列的某一行
data['X'][1]
# 取出某列的某幾行
data['X'][:10]
# 取出某幾列的某幾行
data[['X','Y']][:10]


# loc方法索引
'''
DataFrame.loc[行名,列名]
'''
# 取出某幾列的某一行
data.loc[1,['X','月份']]
# 取出某幾列的某幾行(連續)
data.loc[1:5,['X','月份']]
# 取出某幾列的某幾行(連續)
data.loc[[1,3,5],['X','月份']]
# 取出 x ,FFMC ,DC的0-20行所有索引名稱為偶數的資料
data.loc[range(0,21,2),['X','FFMC','DC']]


# iloc方法索引
'''
DataFrame.iloc[行位置,列位置]
'''
# 取出某幾列的某一行
data.iloc[1,[1,4]]
# 取出列位置為偶數,行位置為0-20的偶數的資料
data.iloc[0:21:2,0:data.shape[1]:2]


# ix方法索引
'''
DataFrame.ix[行位置/行名,列位置/列名]
'''
## 取出某幾列的某一行
data.ix[1:4,[1,4]]
data.ix[1:4,1:4]

-----------------時間提取------------------
# 時間型別資料轉換
data['發生時間'] = pd.to_datetime(data['發生時間'],format='%Y%m%d%H%M%S')

# 提取day
data.loc[1,'發生時間'].day
# 提取日期資訊新建一列
data['日期'] = [i.day for i in data['發生時間']]

--------------Groupby物件常見方法----------------

Grouped物件的agg方法:

Grouped.agg(函式或包含了欄位名和函式的字典)

# 第一種情況
group[['年齡','工資']].agg(min)

# 對不同的列進行不同的聚合操作
group.agg({'年齡':max,'工資':sum})

# 上述過程中使用的函式均為系統math庫所帶的函式,若需要使用pandas的函式則需要做如下操作
group.agg({'年齡':lambda x:x.max(),'工資':lambda x:x.sum()})

Grouped.apply(函式操作)

只能對所有列執行同一種操作

group.apply(lambda x:x.max())

----------Grouped物件的transform方法(這個不常用????)-------------------

grouped.transform(函式操作)

transform操作時的物件不再是每一組,而是每一個元素

# 每一空新增字元
group['年齡'].transform(lambda x: x.astype(str)+'歲').head()

# 組內標準化
group1['工資'].transform(lambda x:(x.mean()-x.min())/(x.max()-x.min())).head()