python學習之pandas

#Pandas
'''
1,Pandas是Python的一個數據分析報包,該工具爲解決數據分析任務而創建。
2,Pandas納入大量庫和標準數據模型,提供搞笑的操作數據集所需的工具
3.pandas提供大量能使我們快速便捷地處理數據的1函數方法
4,Pandas是字典形式,基於Numpy創建,讓Numpy爲中心的應用變得更加簡單
'''
import pandas as pd
import numpy as np
#4 Pandas 數據結構
#4.1Series

s = pd.Series([1,2,3,np.nan,5,6])#索引在左邊值在右邊

print(s)

#4.2 Date Frame
#DateFrame是表格型數據結構,包含一組有序的列,每列可以使不同的值類型。DateFrame有行索引和列索引,可以看成由Series組成的字典。

dates = pd.date_range('20180310',periods = 6)

df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=['A','B','C','D'])

print(df)

print(df['B'])

#創建特定數據的DataFrame

df_1 = pd.DataFrame({

'A':1.,

'B':pd.date_range('20180923',periods=4),

'D':np.array([2]*4,dtype='int32'),

'E':pd.Categorical(['test','train','test','train']),

'F':'foo'

})

#

print(df_1)

print(df_1.dtypes)

print(df_1.index)#行的序號

print(df_1.columns)#列的序號

print(df_1.values)#把每個值進行打印

print(df_1.describe())#數字總結

print(df_1.T)#數字反轉

print(df_1.sort_index(axis=1,ascending=False))#axis等於按第一列排序,如ABCDEFG,然後ascending倒序進行顯示

print(df_1.sort_values(by='E'))#按值進行排列

#pandas選擇數據

dates = pd.date_range('20180924',periods=6)

df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=['A','B','C','D'])

print(df)

print(df[0:3],df['20180910':'20180926'])#第一次切片選擇,第二次按照篩選條件選擇

print(df.loc['20180924',['A','B']])#按照行標籤進行選擇

print(df.iloc[3,1])#輸出第三行第一列的數據

print(df.iloc[3:5,0:2])#3,5行,0,3列

print(df.iloc[[1,2,4],[0,2]])#不連續篩選

print(df[df.A > 0])#篩選出df.A大於0的元素

#pandas設置數據

datas = pd.date_range('20180310',periods=6)

df = pd.DataFrame(np.arange(24).reshape(6,4),index=datas,columns=['A','B','C','D'])

print(df)

df.iloc[2,2] = 999

df.loc['2018-03-15','D'] = 999

print(df)

df[df.A > 0] = 999#A列大於0的爲999???

print(df)

df['F'] = np.NAN

print(df)

df['E'] = pd.Series([1,2,3,4,5,6],index=pd.date_range('20180310',periods=6))#添加一列

print(df)

#7Pandas處理數據

dates = pd.date_range('20180310',periods=6)

df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])

df.iloc[0,1]=np.nan

df.iloc[1,2]=np.nan

print(df)

print(df.dropna(axis=0,how='any'))#0對行進行操作 1對列進行操作 any:只要存在NaN即可drop掉 all:必須全部是NaN纔可drop

print(df.fillna(value=0))#將NaN值替換爲0

print(pd.isnull(df))#是nan爲true不是nan爲false

print(np.any(df.isnull()))#判斷數據中是否存在nanz值

#8 pandas的導入導出

data = pd.read_csv('test1.csv')

data.to_pickle('test.pickle')#將資料存取成pickle文件

#9.pandas合併數據

df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])

df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])

df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])

#

res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)#0表示行合併,1表示列合併,ingnore_index重置序列index index變爲1-8

print(res)

#join合併

df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])

df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'],index=[2,3,4])

print(df1)

print(df2)

res = pd.concat([df1,df2],axis=1,join='outer')#行往外合併

print(res)

res = pd.concat([df1,df2],axis=1,join_axes=[df1.index])#以df1的序列進行合併,df2中沒有的序列NAN值填充

print(res)

#append添加

df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])

df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])

df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])

s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])

res = df1.append(df2,ignore_index=True)#將df2合併到df1下面並重置index

print(res)

res = df1.append(s1,ignore_index=True)#將s1合併到df1下面並重置index

print(res)

#pandas和並merge

#依據一組key合併

left = pd.DataFrame({

'key':['k1','k2','k3','k4'],

'A':['A1','A2','A3','A4'],

'B':['B1','B2','B3','B4']

})

#

print(left)

#

right = pd.DataFrame({

'key':['k1','k2','k3','k4'],

'C':['C1','C2','C3','C4'],

'D':['D1','D2','D3','D4']

})

#

print(right)

#

res = pd.merge(left,right,on = 'key')

print(res)

#依據兩組key合併

left = pd.DataFrame({

'key':['k0','k0','k1','k2'],

'key2':['k0','k1','k0','k1'],

'A':['A1','A2','A3','A4'],

'B':['B1','B2','B3','B4']

})

#

right = pd.DataFrame({

'key':['k0','k1','k1','k2'],

'key2':['k0','k0','k0','k0'],

'C':['C1','C2','C3','C4'],

'D':['D1','D2','D3','D4']

})

print(left)

print(right)

res = pd.merge(left,right,on=['key','key2'],how='inner')#how = outer left right

print(res)

#indicator合併

df1 = pd.DataFrame({'col1':[0,1],'col_left':['a','b']})
df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})
print(df1)
print(df2)

res = pd.merge(df1,df2,on='col1',how='outer',indicator=True)#依據col1進行合併 並啓用indicator = True輸出沒想合併式

print(res)

res = pd.merge(df1,df2,on='col1',how='outer',indicator='indicator_column')#自定義indicator column名稱
print(res)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章