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) --- 生成3行3列的二维数组
注意:
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']])
print(df[['b','c','d']].iloc[::2])
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]] --- 代表删除第2、3行
需要注意的是 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