基礎部分:創建,簡單提取,簡單分析
1.創建表格
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s = pd.Series([1,3,5,np.nan,6,8]) #創建series數組,默認創建整數索引
dates = pd.date_range('20140201',periods=6) #創建時間索引,開始爲2014 02 01 ,持續6次
data = pd.DataFrame(np.random.rand(6,4),index=dates,columns=list('ABCD'))#創建DataFrame
注:最終表格格式
2.按要求提取表格信息
type = data.dtypes #返回每行的格式
head3 = data.head(3) #打印前三行、
tail5 = data.tail(5) #打印後5行
index = data.index #返回行名稱‘
columns = data.columns #返回列名稱
valuse = data.values #返回所有數據
3 對數據進行排序及轉置處理
dataT = data.T #d對數據進行轉置
data_sort_in0 = data.sort_index(axis=0,inplace=False,ascending=True) #按行標籤大小進行升序
#排列,inplace爲是否替換原數據,默認FLASE,ascending代表是否按升序,默認True
data_sort_in1 = data.sort_index(axis=1,inplace=False,ascending=False)
data_sort_value = data.sort_values(by=['A','B'],ascending=[True,False]) #按A,B進行排序,先順序後降序
注:此爲data_sort_in1 = data.sort_index(axis=1,inplace=False,ascending=False) 後結果,按列排序
4 數據信息整理
describe = data.describe() #數據統計:個數,均值,標準差,最大,最小
mean = data.mean() #返回每列的平均值,同時支持min,max,sum操作
count = data.value_counts() #統計數值出現的次數
注:下圖爲進行describe後出現的結果,包括個數,平均數,標準差和其他數據
5 apply 將函數操作用於表格的每一行數據並返回結果
dataa = data.apply(lambda x:x.max()-x.min(),axis=1) #apply,將函數應用於每一行,默認是對列進操作
6 數據整體移動 shift
s=pd.Series([1,3,5,np.nan,6,8],index=dates).shift(periods=2,axis=0) #將橫,縱排數據整體上下移動,不循環。空補NAN
數據獲取
1 簡單獲取
A = data.A #單獨選擇列名稱,返回series,
B = data[2:5] #切片操作,返回行切片
2 通過標籤選擇,即通過loc指定標籤名稱
dataa = data.loc['2014-02-03' : '2014-02-05','A':'C'] #包括首尾
3 通過位置進行選擇,即通過iloc指定位置
dataa = data.iloc[3] #第3行
dataa = data.iloc[2:3,1:2]
dataa = data.iloc[[1,2,3],[0,2]]
4 通過布爾索引
dataaa = data[data.A>0]
dataaa = data[data.A.isin(['a','c'])]
數據修改
1.通過位置改值
data.iat[0,1] = 0
2.通過Series新列
s1 = pd.Series([1,2,3,4,5],index=pd.date_range('20140201',periods=5)) #數據不全,自動補NAN
data['F'] = s1
3.通過numpy數組設置值
data.loc[:,'D'] = np.array([5]*len(data))
4.重構索引以創建新表 reindex
data1 = data.reindex(index=datas[0:4],columns=list(data.columns)+['E']) #複製數據並對應行數數據進行操作
data1.loc[datas[1:3],'E']=2
缺失值操作
data2= data1.dropna() #刪除存在缺失值的行
data3 = data1.fillna(value=3) #將缺失值替換爲3
data4 = pd.isnull(data1) #返回布爾數組,非null則返回ture
數據合併
1.concat 較爲簡單的上下,左右合併
#詳細參考 https://blog.csdn.net/mr_hhh/article/details/79488445
data1 = data.iloc[1:3]
data2 = data.iloc[5:]
data3 = pd.concat([data1,data2],axis=0,keys=['a','b'])
#key參數標明合併表的內容屬於那一部分,axis爲列操作
注:下圖爲最後結果
2.merge 類似並集操作
```python
left=pd.DataFrame({'key':['foo','xx'],'lval':[1,2]})
right=pd.DataFrame({'key':['foo','x'],'rval':[4,5]})
dataa = pd.merge(left,right,on='key') #依據key列是否相同進行操作
注:下圖爲最後結果
3 append 將行連接到dataframe上
df = pd.DataFrame(np.random.rand(8,4),columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s,ignore_index=True)
# ignore_index參數表示是否使用df表index,true則表示新創建一個index 從0開始
數據分組
#分組
df = pd.DataFrame({"A":['foo','bar']*4,
"B":['one','tow']*4,
"C":np.random.rand(8),
"D":np.random.rand(8)})
ga = df.groupby('A') #獲取分組元素,無法直接打印
groups = ga.groups #獲取分組的整體信息#'bar': Int64Index([1, 3, 5, 7], dtype='int64'), 'foo': Int64Index([0, 2, 4, 6], dtype='int64')}
size = ga.size() #獲取每組的個數
bar = ga.get_group('bar') #獲取每個組的詳細信息
mean = ga.mean() #獲取每組的平均值,包括min,max,sum
#分組雙索引
df.groupby(['A','B']).sum()
畫圖
t = pd.Series(np.random.randn(1000),index=pd.date_range(('20000101'),periods=1000))
t =t.cumsum()
t.plot()
plt.show()
數據讀寫
df = pd.DataFrame(np.random.randn(1000,4),columns=list('ABCD'))
df.to_csv("data.csv")
df = pd.read_csv("data.csv",index_col=0)
print(df)