dataFrame常用操作集合


由於工作原因,經常會寫腳本用到dataFrame去完成一些數據操作,但是有些方法總是忘記,每次百度還很難通過關鍵字搜到我想要的東西,所以索性開一篇博客,整合記錄一下自己常用操作。dataFrame數據的操作方式很靈活,該文章僅僅記錄一些常用操作

dataframe格式可以直接畫圖作圖

當我是一個小白時,每次對於一個dataFrame數據,我是這樣作圖的

import matplotlib.pyplot as plt
import pandas as pd
df  = pd.DataFrame({"x":[1,2,3,4],"y":[5,6,7,8]})
plt.plot(df["x"],df["y"])
plt.show()

其實,對於dataFrame格式的數據,可以利用dataFrame自帶的方法作圖

import matplotlib.pyplot as plt
import pandas as pd
df  = pd.DataFrame({"x":[1,2,3,4],"y":[5,6,7,8]})
df.plot(x="x",y="y")
plt.show()

其實的其實(哈哈),對於dataFrame格式的數據,也可以利用seaborn直接傳入dataFrame數據進行各種作圖

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df  = pd.DataFrame({"x":[1,2,3,4],"y":[5,6,7,8]})
sns.lineplot(x="x",y="y",data = df)
plt.show()

雖然看起來三種方法差不多,但是其實第三種使用方式更加優雅,而且風格更好看,並且,sns還提供很多其他作圖方法,比如條形圖,點圖等等。使用起來真的超級方便

取某些特定數據

其實dataFrame取數據的方法很靈活,有很多的方式都可以達到目的。
主要需要我們明白的是,什麼的取樣方法取出來的數據是series類型的,什麼方法取出來是array或者list類型的,因爲我們取出來可能需要一些操作。比如series類型數據是不能直接寫入文本操作的

dates = pd.date_range('20130102',periods=6)
df = pd.DataFrame(np.arrange(24).reshpe((6,4)),index=dates,columns=['A','B','C','D'])
#取出特定列
print(df['A'])
print(df.A)
#取出特定的行
print(df[0:3])
print(df['20130102':'20130104'])
#loc用法(用標籤)
print(df.loc['20130102'])
print(df.loc[:,['A','B']])
print(df.loc['20130102',['A','B']])
#iloc用法(用行號或列號)
print(df.iloc[3:5,1:3])
print(df.iloc[[1,3,5],1:3])
#ix用法,混合標籤和序號(似乎棄用了,在新版本)
print(df.ix[:3,['A','C']])
#Boolean indexing
print(df[df.A<8])

daraFrame數據的合併

將兩個dataFrame數據拼起來也是經常用到的操作。我比較常用的是appen操作

import pandas as pd
import numpy as np
#concatenating
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)
#在以上的基礎上忽略掉行標籤進行從新排序
pd.concat([df1,df2,df3],axis = 0,ignore_index = True)
#join,['inner','outer'],類似數據庫的外連接和內連接,但有點不一樣
df4 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df5 = pd.DataFrame(np.ones((3,4))*2,columns=['b','c','d','e'])
res2 = pd.concat([df4,df5],join='inner',ignore_index=True)
print(res2)
#join_axs
res3 = pd.concat([df4,df5],axis =1,join_axes=[df4.index])
print(res3)

#append
res4 = df1.append([df2,df3],ignore_index = True)
print(res4)
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
res5 =df1.append(s1,ignore_index =True)
print(res5)



import pandas as pd
import numpy as np
left = pd.DataFrame({
    'key':['K0','K1','K2'],
    'A':['A0','A1','A2'],
    'B':['B0','B1','B2']
})
right = pd.DataFrame({
    'key':['K0','K1','K2'],
    'C':['C0','C1','C2'],
    'D':['D0','D1','D2']
})
print(left)
print(right)
#按照key來合併
res = pd.merge(left,right,on='key')
print(res)

dataFrame數據的IO操作

導入 導出
read_csv to_csv
read_excel to_excel
read_hdf to_hdf
read_sql to_sql
read_json to_json
read_msgpack to_msgpack
read_html to_html
read_gbq to_gbq

daframe去除異常值

import pandas as pd
import numpy as np
dates = pd.date_range('20130102',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
#只要有一個nan就丟掉
print(df.dropna(axis=0,how='any'))
#全部爲nan就丟掉
print(df.dropna(axis=0,how='all'))
#把nan值改成爲0
print(df.fillna(value = 0))
#判斷是否有缺失的值
print(df.isnull())
#在表格很大的情況下判斷是否有缺失的值
print(np.any(df.isnull())==True)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章