Pandas之Dataframe

1.关于dataframe
概念:二维数组dataframe是一个表格型的数组,包含一组有序的列,其列的值类型可以使数值、字符串、布尔值等
注意:dataframe中的数据是以一个或多个二维块存放,不是列表、字典或一维数组。

dataframe创建方法如下:
	1.由数组/list组成:
		定义格式:
			data1 = {
				'a':[1,2,3],
				'b':[4,5,6],
				'c':[7,8,9]
			}
			解释:以上的就是以list组成
			data2 = {
				'one':np.random.rand(3),
				'two':np.random.rand(3)
			}
			解释:以上则是由数组numpy组成
	注意:
		1.由数组/lisr组成的字典,创建dataframe,columns为字典的key,index为默认字符集
		2.字典的长度必须保持一致
        3.columns参数:可以重新指定列的顺序,格式为list,如果出现数据红没有的列,以Nan填充
        4.如果columns重新指定,则列的数量可以少于原数据,只显示一部分
    
    2.由series组成:
    	定义格式:
        	data1 = {
                'one':pd.series(np.random.rand(2)),
                'two':pd.series(np.random.rand(3))
            }
            data2 = {
                'one':pd.series(np.random.rand(2),index=['a','b']), --- 这里的index是行标签
                'two':pd.series(np.random.rand(3),index=['a','b','c'])
            }
            注意:
            	1.如果在创建一维数组series时,没有指定index,则使用默认字符集
                2.由series组成的字典,创建dataframe,columns为字典key,index为series标签
                3.由series组成的dataframe,长度可以不一样,生成的dataframe会出现Nan值
     
    3.通过二维数组直接创建
    	格式:reshape
        解释:在数据创建的时候,可以通过该方法将数组的形状改变,比较常用
        例如:
        	ar = np.random.rand(9),reshape(3,3) --- 生成33列的二维数组
        注意:
        	1.通过二维数组直接创建dataframe,得到一样形状的结果数据,如果不指定index和columns,则
              都使用默认数字字符集。
            2.index 和 columns指定长度与原数组保持一致,不能不一样
     
    4.由字典组成的列表
    	格式:data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
        注意:
        	1.由字典组成的列表创建dataframe,columns为字典的key,index不做指定则默认数组标签
            	例如:以上的列为:
                	'one' 'two' 'three' 也就是综合所有字典的key,每一个列表元素是一行记录
            2.columns和index参数列表分别重新指定相应列及行标签
            
    5.由字典组成的字典
    	格式:
        	data = {'Jack':{'math':90,'english':89,'art':78},
                   'Marry':{'math':82,'english':95,'art':92},
                   'Tom':{'math':78,'english':67}}
        注意:
        	1.外层的字典key为列columns,index为子字典的key
            2.columns参数可以增加和减少现有列,如出现新的列,值为Nan
            3.index在这里和以前不同,不能改变原有的index,如果指向新的标签,值为Nan(非常重要)
            
        
           
2.pandas数据结构dataframe:索引
概念:在dataframe中既有行索引也有列索引,可以看做由series组成的字典(共用一个索引)
	需要掌握的:
		1.选择列
		2.选择行
		3.切片
		4.布尔值判断

1.选择行与列:
	例如:df = pd.DataFrame(np.random.rand(12).reshape(3,4)*100,
                   index = ['one','two','three'],
                   columns = ['a','b','c','d'])
   	选择列:
    	data1 = df['a']
    选择行:
    	data3 = df.loc['one']
    注意:
    	1.按照列名选择列,,只选择一列输出series,选择多列输出dataframe
        2.按照index选择行,只选择一行输出series,选择多行输出dataframe
2.选择列 - df[]
	作用:一般用于选择行
    注意:
    	1.df[]默认选择列,[]中写列名,所以一般数据colunms都会单独定制,不会使用默认数字,避免index冲突
        2.df[]中的列必须是存在的,否则报错
        3.df[]中为数字时,默认选择行,且只能进行切片选择,不能单独选择例如df[0]
        4.如果df[]中是数字,则结果输出为dataframe,即便只选择一行
        5.df[]不能通过索引标签名来选择行(df['one'])
        6.重点:df[col]一般用于选择列,[]写列名
 
3.按index选择行 - df.loc[]
	作用:根据index选择行
    注意:
    	1.单个标签索引,返回series
        2.多标签返回dataframe,如果标签不存在,则返回Nan
        3.df.loc[]做切片操作时,末端包含
        4.df.loc[label]主要针对index选择行,同时支持指定index,及默认数字index
4.df.iloc[] - 选择行
	作用:按照整数位置 (从轴的0到length-1),类似list的索引,其顺序就是dataframe的整数位置,从0开始。
    位置索引又分为两类:
    	1.单位置索引:
        	和loc索引不同,不能索引超出数据行数的整数位置,不能越界
        2.多位置索引:
        	顺序可变,末端不包含
            
5.布尔型索引	
	和series原理相同
    
    不做索引会对数据每个值进行判断:
    	索引结果保留所有数据:True返回数据,False返回值为NaN
    
    单列做判断:
    	索引结果保留单列判断为True的行数据,包括其他列
    多列做判断:
    	索引结果保留所有数据:True返回原数据,False返回值NaN
     多行做判断:
    	索引结果保留所有数据:True返回原数据,False返回值为NaN
     注意:
    	对于布尔索引来说,只有单列做判断的时候只保留结果为True的数据以及其他列,
        其他索引判断都是保留所有数据,如果为False则返回值为NaN。
        
6.多重索引:
	概念:比如同时索引行和列
    规则:先选择列再选择行 ---> 相当于一个数据,先筛选字段,再选择数据量
    格式:
    	df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
                   index = ['one','two','three','four'],
                   columns = ['a','b','c','d'])
       	
    	
        print(df['a'].loc[['one','three']])   # 选择a列的one,three行
        print(df[['b','c','d']].iloc[::2])   # 选择b,c,d列的one,three行
        print(df[df['a'] < 50].iloc[:2])   # 选择满足判断索引的前两行数据
     
    
        
3.pandas数据结构dataframe:基本技巧
1.基本技巧:
	1.数据查看、转置
	2.添加、修改、删除值
	3.对齐
	4.排序

2.数据查看、转置:
	和series一样,查看使用 .head().tail(). 转置使用 .T 即 行转列 列转行

3.添加与修改:
	直接新增列/行并赋值:
		df['e'] = 10
		df.loc[4] = 20
	
	通过索引可直接进行修改值:
		df['e'] = 20   --- 修改 e 列所有值为20
		df[['a','c']] = 100 --- 修改 a c两列的所有值为 100
        
        df.iloc[0] = 123  --- 修改第一行所有数据为 123
		df.iloc[[1,2]] = 456 --- 修改第二、第三行所有数据为 456

4.删除 del / drop()
	可以直接删除整列:
    	del df['a'] --- 将a列整个删除
    删除行:
    	df.drop(0) --- 代表删除第1行
        df.drop[[1,2]] --- 代表删除第23行
        需要注意的是 del直接作用的就是原数据,而drop 是删除之后生成新的数据,不改变原数据:
        	inplace = False --- 删除后生成新的数据,不改变原数据
            inplace = Truw  --- 直接作用于原数据
        如果要使用drop删除整列:
        	需要添加一个参数:
            	axis = 1 例如:
                	df.drop(['d'],axis=1) --- 同样inplace默认为False 删除生成的新的数据
            小cookie:
            	axis = 0  --- 代表跨行
                axis = 1  --- 代表跨列
               	换句话说:
                    使用0值表示沿着每一列或行标签\索引值向下执行方法
                    使用1值表示沿着每一行或者列标签模向执行对应的方法
5.对齐:
	dataframe对象之间的数据自动按照列和索引(也就是行标签)对齐
    
6.排序1 - 按照值排序 .sort_vales
	同样适用于series,例如:
    	df1 = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
                   columns = ['a','b','c','d'])
        print(df1.sort_values(['a'], ascending = True))  # 升序
        print(df1.sort_values(['a'], ascending = False))  # 降序
        注意:
        	1.ascending参数是用来设置按照升序还是降序,默认是升序
            2.df1.sort_values(['a'],ascending=True) --- 这是单列排序 只对a列排序
        	3.如果要进行多列排序:
            	df2.sort_values(['a','c']) --- 列与列之间使用逗号隔开
                
7.按照索引排序:
	格式:df1.sort_index()
    注意:默认ascending=True,inplace=False
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我知道了。关于PandasDataFrame对象的使用,可以通过以下方式来创建: ```python import pandas as pd # 创建一个DataFrame对象 df = pd.DataFrame({ 'name': ['Tom', 'Jerry', 'Mickey'], 'age': [18, 20, 22], 'gender': ['M', 'M', 'M'] }) # 打印DataFrame对象 print(df) ``` 上述代码中,我们首先导入了Pandas库,并使用pd.DataFrame()函数创建了一个DataFrame对象。在创建时,我们传入了一个字典类型的数据,其中字典的键为列名,字典的值为该列的数据列表。最后,我们通过print()函数打印了该DataFrame对象。 除了创建DataFrame对象,我们还可以对其进行一些基本操作,例如获取某一列或多列的数据: ```python # 获取某一列的数据 name = df['name'] print(name) # 获取多列的数据 name_age = df[['name', 'age']] print(name_age) ``` 上述代码中,我们通过中括号[]来获取DataFrame对象中的某一列或多列数据,并将其值给一个变量。需要注意的是,当我们获取多列数据时,需要使用双重中括号[[]]。 除此之外,我们还可以对DataFrame对象进行一些统计计算,例如计算某一列的平均值、最大值、最小值等: ```python # 计算年龄列的平均值 age_mean = df['age'].mean() print(age_mean) # 计算年龄列的最大值 age_max = df['age'].max() print(age_max) # 计算年龄列的最小值 age_min = df['age'].min() print(age_min) ``` 上述代码中,我们通过调用DataFrame对象的mean()、max()、min()等方法,对其某一列数据进行了统计计算,并将结果值给一个变量。 这只是PandasDataFrame对象的一些基本用法,还有很多其他的操作和功能。如果你想深入了解,可以查看Pandas官方文档或相关书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值