3.1 Dataframe的創建
- 利用 list 對象創建
data = [['Alex',10],['Bob',12],['Clarke',13]]#list對象可嵌套 df = pd.DataFrame(data,columns=['Name','Age'],dtype=float) data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}] df = pd.DataFrame(data,index=['first','second'])#list的元素個數就是df的行數,列名會按傳入數據特點自動識別
data = [{'a':1,'b':2},{'a':5,'b':10,'c':20}] df1 = pd.DataFrame(data,index=['first','second'],columns=['a','b']) df2 = pd.DataFrame(data,index=['first','second'],columns=['a','b1']) #列名由columns參數指定,與已有列名進行匹配,若沒有則新建,該參數優先級高於自動分配的列名
- 利用 dic 對象創建
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]} df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])#字典對象創建數據框自動分配列名 d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) #所得行索引是series索引的並集
3.2 Dataframe 行操作
3.2.1 行的查看
df.shape[0] #統計行數
3.2.2 行的篩選
df.query("a>0 & b<100",inplace = False) # inplace表示是否替代原df
3.2.3 行的添加
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b']) df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b']) df3 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','d']) df = df.append(df2) df = df.append(df3) #append增加行時新行實際是作為數據框整體添加 #增加行時,列名不一致的話會自動創建新列,並返回警告 #增加行時,行索引跟着一起復制,ignore_index為Ture時可忽略原索引,自動遞增 df = pd.concat([df,pd.DataFrame({'a':[3],'b':[90]})]) #也可通過concat方法添加
3.2.4 行的刪除
- 按索引刪除
df = df.drop(0)#刪除行索引為0的所有行
- 刪除重復行
df.drop_duplicates(keep='first')#keep保留first或last的行
3.3 Dataframe 列操作
3.3.1 列的查看
df.columns.size #同df.shape[1] list(df.columns)
3.3.2 列名修改
df.rename(columns={'a':'id'},inplace=False)# inplace=False標識不覆蓋原來的數據框df df.rename(columns={'a':'id','b':'age'},inplace=False) #修改多個列名 df.columns=["id","age"] #修改全部列名
3.3.3 列的刪除
df.drop(axis=1,columns=["four"],inplace=False) df.pop('three') #刪除並彈出three列 del df['four'] #使用del函數刪除列時不能用df.four來指定列
3.3.4 列的添加
df['three'] = pd.Series([10,20,30],index=['a','b','c']) df['four'] = df.one+df.three #可以直接通過存在的列進行添加 df['five'] = df.one*2 df['six'] = "new" df['seven'] = df.one.apply(lambda x :"hellow" if x>5 else "fine") df['eight'] = list(range(2)) df["onefivebigger"] = df[["one","five"]].apply(lambda x: max(x) ,axis=1)
3.3.5 列的轉化
df.one.astype("double") df["two"]= df.two.apply(pd.to_datetime,format='%Y-%m-%d %H:%M:%S.%f')