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