pandas方法之DataFrame
1. Dataframe的创建
- 1. 由数组或列表组成的字典构建DataFrame
1 data1 = {'a' : [1,2,3],'b' : [4,5,6], 'c' : [7,8,9]} 2 df1 = pd.DataFrame(data1)
- 2. 由Series组成的字典构建DataFrame
1 data2 = {'a' : pd.Series(np.random.rand(3)), 2 'b' : pd.Series(np.random.rand(3)*10), 3 'c' : pd.Series(np.random.rand(3)*100)} 4 df2 = pd.DataFrame(data2)
- 3. 由字典组成的列表构建DataFrame
1 data4 = [{'a':1,'b':2},{'a':5,'b':10,'c':15}] 2 df4 = pd.DataFrame(data4)
- 4. 由字典组成的字典构建DataFrame
1 data5 = {'xiaoming':{'Chinese':np.random.randint(60,100), 2 'Math':np.random.randint(60,100), 3 'Endlish':np.random.randint(60,100)}, 4 'xiaohong':{'Chinese':np.random.randint(60,100), 5 'Math':np.random.randint(60,100), 6 'Endlish':np.random.randint(60,100)} 7 } 8 df5 = pd.DataFrame(data5)
- 5. 通过二维数组构建DataFrame
df3 = pd.DataFrame([[1,2,3], [4,5,6],[7,8,9]])
- 6. 读取文件直接转DataFrame
1 pd.read_csv() 2 pd.read_table()
3 pd.read_csv()
2. Dataframe的查询
(推荐使用loc方法, loc方法能够取到任何位置)
- loc方法
1 DataFrame.loc[7] #按单个索引 2 DataFrame.loc[[1,2,4]] #按索引的array 3 DataFrame.loc[[2:4]] #按索引的切片 4 DataFrame.loc[[2, "name"]] #按行列定位 5 DataFrame.loc[2, "age":"name"] 或 DataFrame.loc[2:6, "age":"name"] #按行列的切片 6 DataFrame.loc[[True,False,False,True]] #按boolea的array
- iloc方法(它接受的数字)
1 DataFrame.iloc[7] #按单个索引 2 DataFrame.loc[[1,2,4]] #按索引的array 3 DataFrame.loc[[True,False,False,True]] #按boolea的array
- at方法、iat方法 (此处不再记述)
3. Dataframe行或列的删除方法
1 DataFrame.drop([1,5]) #行 2 DataFrame.drop([1,5], axis = 1) #列
4. Dataframe的修改方法
- 值的修改
1 DataFrame.loc[1:2,('english','id')]=[[38,2],[23,2]] #loc方法
- 列名的修改
1 DataFrame.columns=['english_new','id_new','math_new','name_new'] #修改全部列名 2 DataFrame.rename(columns={'english_new':'english'},inplace=True) #rename方法
- 索引的修改
1 DataFrame.rename({0:'english1'},inplace=True) #rename方法 2 DataFrame.reset_index(inplace=True,drop=True) #reset_index方法 3 DataFrame.set_index('id_new') #将其它列设为索引 4 DataFrame.insert(第几列,新列列名,值) #在指定位置添加新列
- 添加新行
1 1 pd.concat(obj=[obj1,obj2,……], 2 2 axis=0) : axis = 0 #即在竖直方向上合并、排列 ; axis = 1 反之 3 3 DataFrameObj.append(obj, 4 4 ignore_index = False) #按行方向合并; 当ignore_index = True时,即忽略要合并dataframe的index 5 5 DataFrameObj.merge(obj,on,……) #按列的方向合并(将两个DataFrame关联起来,on参数指关联值) 6 6 DataFrameObj.join(obj, 7 7 lsuffixes = ..., 8 8 rsuffixes = ...,on = ...) #按列的方向合并(第2、3参数表示当合并数据中有重名的列名时,将左右分别命名为……,on表示两数据集合并的关联列)
- 其它
1 transform() #与groupby搭配使用, 在groupby分组使用transform将结果又自定义聚合起来 2 corr() #计算列的相关性(计算数据的相关系数) 3 factorize() #可以字符串转为数字编码。省去了人工使用map方法编码 4 qcut() #将连续数值分为指定份 5 get_dummies() #相当于one-hot编码 6 Series.get() #在Series中,通过get(index)方法来获取索引对应的值 7 nlargest() #依据指定的column, 取指定top N, 返回dataframe 8 nsmallest() #和nlargest相反 9 numpy.corrcoef() #计算相关系数 10 # 显示中文字体 11 import matplotlib 12 matplotlib.use('qt4agg') 13 #指定默认字体 14 matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 15 matplotlib.rcParams['font.family']='sans-serif' 16 #解决负号'-'显示为方块的问题 17 matplotlib.rcParams['axes.unicode_minus'] = False