3 Dataframe 創建及行列的查看、添加、刪除


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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM