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