1)pandas是一個開源的,BSD許可的庫,爲Python編程語言提供高性能,易於使用的數據結構和數據分析工具。編程
2)numpy可以幫助咱們處理數值,可是pandas除了處理數值以外(基於numpy),還可以幫助咱們處理其餘類型的數據數組
1)Series是一種相似於一維數組的 對象,由一組數據(各類NumPy數據類型)以及一組與之對應的索引(數據標籤)組成。數據結構
l 相似一維數組的對象dom
l 由數據和索引組成編程語言
² 索引(index)在左,數據(values)在右工具
² 索引是自動建立的性能
2)建立學習
ser_obj = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))優化
3)切片和索引spa
切片:直接傳入strat end或步長便可
索引:一個的時候直接傳入序號或者index,多個的時候傳入序號或者index的列表
4)索引和值
l 獲取索引 t.index
l 獲取值 t.values
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列能夠是不一樣類型的值。DataFrame既有行索引也有列索引,它能夠被看作是由Series組成的字典(共用同一個索引),數據是以二維結構存放的。
l 相似多維數組/表格數據 (如,excel, R中的data.frame)
l 每列數據能夠是不一樣的類型
l 索引包括列索引和行索引
代碼:
import numpy as np # 經過ndarray構建DataFrame array = np.random.randn(5,4) print(array) df_obj = pd.DataFrame(array) print(df_obj.head())
輸出:
0.835005941.492901380.531201060.11313932[[---]
0.646297620.367799410.080110840.60080495[- ]
1.234585220.334096740.587781950.73610573[- --]
1.476514140.994001870.210019950.90515656[- -]
0.566694191.382383480.490990071.94484598[ - ]]
0123
00.8350061.4929010.5312010.113139 ---
10.6462980.3677990.0801110.600805 -
21.2345850.3340970.5877820.736106- --
31.4765140.9940020.2100200.905157- -
40.5666941.3823830.4909901.944846 -
2.經過dict構建dataframe
代碼:
# 經過dict構建DataFrame dict_data = {'A': 1, 'B': pd.Timestamp('20170426'), 'C': pd.Series(1, index=list(range(4)),dtype='float32'), 'D': np.array([3] * 4,dtype='int32'), 'E': ["Python","Java","C++","C"], 'F': 'ITCast' } #print dict_data df_obj2 = pd.DataFrame(dict_data) print(df_obj2)
輸出:
A B C D E F
01201704261.03 -- Python ITCast
11201704261.03 -- Java ITCast
21201704261.03 -- C++ ITCast
31201704261.03 -- C ITCas
3.經過列索引獲取列數據(Series類型)
df_obj[col_idx] 或 df_obj.col_idx
4.增長列數據
df_obj[new_col_idx] = data
5.刪除列
del df_obj[col_idx]
df.sort_values(by="Count_AnimalName",ascending=False)
ascending參數默認爲true,即升序排列
1)取某一列df[" Count_AnimalName "]
2)取行取列df[:100][" Count_AnimalName "]
1) df.loc 經過標籤索引行數據
2) df.iloc 經過位置獲取行數據
賦值更改數據:
1) 判斷數據是否爲NaN:pd.isnull(df),pd.notnull(df)
2) 處理缺失數據
l 方式1:刪除NaN所在的行列dropna (axis=0, how='any', inplace=False)
l 方式2:填充數據,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
3) 處理爲0的數據:t[t==0]=np.nan
固然並非每次爲0的數據都須要處理
計算平均值等狀況,nan是不參與計算的,可是0會
默認狀況下他是把行索引相同的數據合併到一塊兒
按照指定的列把數據按照必定的方式合併到一塊兒
1) 默認的合併方式inner,並集
2) merge outer,交集,NaN補全
3) merge left,左邊爲準,NaN補全
4) merge right,右邊爲準,NaN補全
1)groupby方法
grouped = df.groupby(by="columns_name")
grouped是一個DataFrameGroupBy對象,是可迭代的
grouped中的每個元素是一個元組
元組裏面是(索引(分組的值),分組以後的DataFrame)
2)DataFrameGroupBy對象有不少通過優化的方法
簡單的索引操做:
l 獲取index:df.index
l 指定index :df.index = ['x','y']
l 從新設置index : df.reindex(list("abcedf"))
l 指定某一列做爲index :df.set_index("Country",drop=False)
l 返回index的惟一值:df.set_index("Country").index.unique()
pd.date_range(start=起始時間, end=「」, periods=生成個數, freq='D')
start和end以及freq配合可以生成start和end範圍內以頻率freq的一組時間索引
start和periods以及freq配合可以生成從start開始的頻率爲freq的periods個時間索引
df["timeStamp"] = pd.to_datetime(df["timeStamp"],format="")
format參數大部分狀況下能夠不用寫,可是對於pandas沒法格式化的時間字符串,咱們可使用該參數,好比包含中文
重採樣:指的是將時間序列從一個頻率轉化爲另外一個頻率進行處理的過程,將高頻率數據轉化爲低頻率數據爲降採樣,低頻率轉化爲高頻率爲升採樣
pandas提供了一個resample的方法來幫助咱們實現頻率轉化
periods=pd.PeriodIndex(year=data["year"],month=data["month"],day=data["day"],hour=data["hour"],freq="H")
以前所學習的DatetimeIndex能夠理解爲時間戳,那麼如今咱們要學習的PeriodIndex能夠理解爲時間段。
l 將行索引轉換爲列索引,完成層級索引
l DataFrame->Seriees
示例代碼:
import numpy as np import pandas as pd df_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2']) print(df_obj) stacked = df_obj.stack() print(stacked)
運行結果:
# print(df_obj) data1 data2 0 7 9 1 7 8 2 8 9 3 4 1 4 1 2 # print(stacked) 0 data1 7 data2 9 1 data1 7 data2 8 2 data1 8 data2 9 3 data1 4 data2 1 4 data1 1 data2 2 dtype: int64
l 將層級索引展開
l Series->DataFrame
l 認操做內層索引,即level=-1
示例代碼:
# 默認操做內層索引 print(stacked.unstack()) # 經過level指定操做索引的級別 print(stacked.unstack(level=0))
運行結果:
# print(stacked.unstack()) data1 data2 0 7 9 1 7 8 2 8 9 3 4 1 4 1 2 # print(stacked.unstack(level=0)) 0 1 2 3 4 data1 7 7 8 4 1 data2 9 8 9 1 2
1) duplicated() 返回布爾型Series表示每行是否爲重複行
2) drop_duplicates() 過濾重複行
l 默認判斷所有列 df_obj.drop_duplicates()
l 可指定按某些列判斷 df_obj.drop_duplicates('data2')
replace根據值的內容進行替換
示例代碼:
# 單個值替換單個值 print(ser_obj.replace(1, -100)) # 多個值替換一個值 print(ser_obj.replace([6, 8], -100)) # 多個值替換多個值 print(ser_obj.replace([4, 7], [-100, -200]))