数据可视化笔记记录(二)pandas

笔记内容是根据B站上面的一位老师的视频而记录了,因为我也还在学习,所以个人理解可能会出现错误,若有错误请指出。另外这篇文章会很长
B站视频连接

numpy,matplotlib的学习记录

pandas 学习记录

SerIes结构,一图胜千言
在这里插入图片描述

Series创建

pd.Series(data=None, index=None, dtype=None, name=None, copy=False)

data就是输入的数据(列表,ndarray数组,字典)
index索引值,可以传递列表或者数组
dtype 指定数据类型,没有则自行推断
name 为Series指定一个名字
copy 表示对data进行拷贝,默认为False

列表创建

	arr = [3,10,23,4,5]
	s = pd.Series(arr)
	print(s)
	/*结果
0     3
1    10
2    23
3     4
4     5
index values
	*/
	# 通过标签取得对应的值或者修改对应的值,如果没有为-1的index,那么s[-1]会报错

字典创建

一个键对标一行,键是索引

d={'a':1,'b':2,'c':3} 
s = pd.Series(d,index=list('cba'))
# 没有d对应的值,那么就是NaN
s = pd.Series(d,index=list('abd'))
print(s)

标量创建

s = pd.Series(100) ,就是只有一个

索引

下标索引

就是按照顺序来的
在这里插入图片描述

标签索引

就是第一列的那个,可以一次性访问多个,假设上面的Series的名字叫做s,那么s[[‘Beijing’,‘Guangzhou’]]就是取出来Beijing和Guangzhou对应的值
多标签会创建一个新的数组
s1 = s[[‘Beijing’,‘Guangzhou’]]

切片

如果是使用下标则包头不包尾,如果是使用标签则是包头又包尾

创建DataFrame对象

pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=None)

data就是输入的数据
index就是行标签,不传就是RangeIndex(0,1,2,…,n)n代表data的元素个数
columns:列标签,不传就是RangeIndex(0,1,2,…,n)n代表data的元素个数

使用普通列表创建

data = [1,2,3,4,5,6]
df = pd.DataFrame(data)
在这里插入图片描述

使用嵌套列表创建

每个子列表就是一行数据

data = [['wangyuhen',20],['Lily',30],['yuya',40]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=int)
# dtype 指定数据类型,如果不符合由系统自行推断

在这里插入图片描述

字典嵌套列表

键对应的值的元素长度必须相同(也就是列表长度相同),如果传递了索引,那么索引的长度应该等于数组长度

data={'Name':['张辽','刘备','张飞'],'Age':[28,30,28]}
index = ['rank1','rank2','rank3']
df = pd.DataFrame(data,index=index)
print(df)
print(df.index)
print(df.columns)

在这里插入图片描述

列表嵌套字典

字典的键作为列名

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data,index=['first','second'])
print(df)

在这里插入图片描述

Series创建DataFrame对象

就是字典套Series

c = {'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(c)
print(df)

在这里插入图片描述

列操作DataFrame

选取数据列

直接用标签名字来选择

data={'Name':['张辽','司马懿','夏侯惇'],
	  'Age':[28,34,23]}
index=['rank1','rank2','rank3']
df = pd.DataFrame(data,index=index)
print(df)
print(df['Name'])

在这里插入图片描述

列添加

直接使用df[‘列’]=值

    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)

    # 使用df['列']=值,插入新的数据列
    print("df['列']=值添加新的列")
    df['three'] = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    print(df)

    # 将已经存在的数据列相加运算,从而创建一个新的列
    print("运算产生列")
    df['five'] = df['one'] + df['three']
    print(df)

在这里插入图片描述

insert方法添加

df.insert(loc, column, value, allow_duplicates=False)
# loc 就是插入的索引
# column :插入列的标签,可以是字符串,数字
# value:数值,Series或者数组
# allow_duplicates:允许重复列,默认为False
info = {'Name': ['王曦仪', '于风', '张蔷薇'],
         'Age': [19, 19, 17]}
 df = pd.DataFrame(info)
 df.insert(1, column='Score', value=[99, 98, 98])
 print(df)

在这里插入图片描述

删除数据列

del DataFrameName[‘列名’]
DataFrameName.pop(’列名’),这个有返回值

行操作 DataFrame

标签选取

借助于loc属性
DataFrameName.loc[列名]
DataFrameName.loc[行名,列名]

data = {'one':[1,2,3],'two':[1,2,3,4]}
df = pd.DataFrame(data,index=list('abcd'))
print('原始数据')
print(df)
print('标签为c的数据')
print(df.loc['c'])
print(df.loc[1,'two'])

在这里插入图片描述

也可以切片操作
df.loc[行名1:行名2,列名1:列名2]
df.iloc[行数1:行数2] 不包括行数2

添加行

这个有返回值
df.append(
other, ignore_index=False, verify_integrity=False, sort=False)
other:DataFrame或者Series/dic类对象,或者是这些对象的列表
ignore_index:默认为False,如果为True将不适用index标签,如果在行末追加新数据行就改为True,反之False
verify_integrity:为True,则在创建具有重复项的索引时引发ValueError,为False则不引发
sort:字面意思,排序

data={'Name':['张辽','张居正','王阳明','曹操'],'Age':[29,28,28,29],'Salary':[5000,7000,8000,10000]}
df = pd.DataFrame(data)
df=df.append({'Name':'刘备','Age':28},ignore_index=True)
print(df)

删除行

不会更改元数据,如果要改成更改元数据的,在drop中加一个inplace=True即可
dataFrameName.drop(行名也可以是索引名)

常见的一些函数

调用方式都是通过DataFrame对象名.
下面以df代替DataFrame对象名

名称描述例子
T转置df.T
axes返回由行轴标签和列轴标签的列表df.axes
dtypes返回每列数据的数据类型df.dtypes
empty没有数据或者任意坐标轴的长度为0返回Truedf.empty
columns返回所有列标签df.columns
shape返回含有行数和列数的元组df.shape
size返回元素个数df.size
values使用numpy数组表示DataFrame中的元素值df.values
rename修改列名的df.rename([index/column]={oldname:newname,…}
info打印信息df.info
sort_index(axis,ascending,inpalce)根据行或列进行排序这个参数比较多,下面再看
sor_values(by,axis,ascending,inplace,na_position)上同上同

sort_index(axis,ascending,inplace)
axis:0按照行名排序,1按照列名排序
ascending:为True则升序,为False则降序
inplace:为False不影响源数据,反之影响

df = pd.DataFrame({'b':[1,2,2,3],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3]) 
#默认按照行进行升序排序,也可以写成axis=0,ascending=True
df.sort_index()
# 按照列标签进行升序排序
df.sort_index(axis=1)
# inplace=True,排序结果存放在元数据中
df.sort_index(axis=1,inplace=True)

sor_values(by,axis,ascending,inplace,na_position)
by:若axis=0,就是列名,若axis=1,就是行名
axis:为0就是列,为1就是行,默认按照列进行升序排序
ascending:为True就是升序,反之降序
inplace:为True影响元数据,反之不影响
na_position:为first就是NaN值排序排在第一,last就是排在最后

df = pd.DataFrame({'b':[1,2,3,2],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3]) 
# 按照b列进行升序排序
df.sort_values(by='b')
# 先按b列排序,再按a列升序排序
df.sort_values(by=list('ba'),ascending=[False,True])
# 按照行3进行升序排序
df.sort_values(by=3,axis=1)# 必须指定axis=1,要不然搞成了列了
# 按照行3升序,行0降序
df_sort_values(by=[3,0],axis=1,ascending=[True,False])

一些零碎的知识点

  1. 取数据的时候,先找标签,在找索引,都找不到就报错
  2. 通过name属性可以设置Series的名字:data.name=‘first’,通过index.name属性可以设置Series的index名字:index.name=‘index’
  3. 如果是根据ndarray创建的Series,一改都改,如果原数据源是非Series和ndarray类型时,对Series进行操作的时候不会改变元数据

了解之类的

DataFrame这个数据结构我觉得就像是表格,表格嘛,各个列的数据类型可以不一致.

一些技巧之类

  1. 查看前几条数据
    pdName.head([n]) n就是几条数据,比如要查看前3条记录,那么n就是3,不写就是1,查看后几条数据就是tail(),和head一样
  2. reindex 重新索引,如果新设置的索引与旧的索引有不一致的地方,那么不一致地方的数据改成NaN,如果不想改成NaN可以通过fill_value来设置,fill_value=1.这个会重新生成对象
    pdName.reindex(list(‘cde’))
  3. 对齐运算
    按照索引进行对齐运算,没对齐的位置补NaN
    s1 = pd.Series(np.random.rand(3), index=[“Kelly”,“Anne”,“T-C”])
    s2 = pd.Series(np.random.rand(3), index=[“Anne”,“Kelly”,“LiLy”])

4.删除
pdName.drop(“索引”,inplace=False)
pdName.drop(“索引”,inplace=True)
当inplace=True时,作用到元数据,反之不作用
5. 添加
如果有该索引就是修改,无则添加

本人小白一个,若有错误请指出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值