数据的筛选

data = pd.read_excel(r'D:\Anaconda\Work_file\test_data.xlsx',sheet_name=0,dtype={'列二':str})  #注意如果dtype列中有缺失值int型会报错。
data[:10] #取前10行数据
data['列三'][:5]  #取出某列前5行数据
data[['列一','列四','列三']][:5]  #取出某几列前5行数据

这里的列的顺序是自己设置的,返回顺序和自己设置的顺序是一样的。

DataFrame条件查询与增删改查

data[data['列四']==138][['列二','列三','列四']] #DFname[A][B],返回列二、三、四中列四值为138的行。
data[(data['列四']==138) & (data['列五']>55)][['列五','列四']] #DFname[(A) & | ~(B)][C],或与非的条件查询
data[(data['列四'].between(150,160,inclusive=True))][['列五','列四']] #inclusive指包含给出的数值,闭区间
data[data['列二'].isin(['王\n1','李1'])][['列二','列四']] #isin主要用于判断字符串是否在某列,字符串要给全。
data[data['列二'].str.contains('王\n10','李')][['列二','列四']] #contains只能判断一个字符串,传入两个也是判断第一个。
data['列十一'] = data['列四'] * data['列五'] #添加新的一列,data['列十二'] = 'i',这种相乘是对应列每行的值相乘添加到新的列中。
data.drop('列十一',axis=1,inplace=True) #如果不加inplace是只作用于视图,axis=1是沿列方向操作。
data.drop(labels=[2,3],axis=0,inplace=True) #这里删除的label是索引,把索引为2和3的行删除了。
data.loc[data['列四']==152,'列四'] = 15200 #把列四中值为152的元素,修改为15200,作用于列四。
data.rename(columns={'列一':'日期'},inplace=True) #修改列名
data.rename(index={0:'00'}) #修改索引名不加inplace=True则不作用于原表
data.describe() #粗略看一下数据表中数据情况

把某列换到其他的位置

#(1)先把想换的数据取出来
a = data['列十一']
#(2)再把数据从原数据表中删除,删不删都行看个人。
data.drop(['列十一'],axis=1,inplace=True)
#(3)再把数据插到想要放的位置上
data.insert(5,'列十一',a) #第一个参数5意思是要放到的位置,第二个参数是新列的名字,第三个参数是把哪个数据放在新列。

将生成的数据加到DataFrame中

a = np.random.randint(10,101,105)
b = []
for i in a:
b.append(str(i)+'岁')
data.drop(['列七'],axis=1,inplace=True)
data.insert(6,'列七',b) #第一个参数5意思是要放到的位置,第二个参数是新列的名字,第三个参数是把哪个数据放在新列。
data.to_excel('test_data.xlsx',index=False,encoding='utf-8')

数据整合

df1 = pd.DataFrame({'id':[1,2,3,4,5],'name':['张三','李四','王五','小明','小红'],'age':[12,13,14,15,16],'gender':['男','女','男','女','男']})
df2 = pd.DataFrame({'ID':[2,5,7,6,9,8],'科目':['数学','语文','英语','物理','地理','化学'],'得分':[22,23,24,35,26,35]})
df3 = pd.DataFrame({'id':[11,12,13],'name':['张三','李四','王五'],'收入':[1000,2000,3000]})#join='inner'按照最短索引拼接,多余的去掉,比如3行拼5行只留下3行,outer按最长的拼,不够的补充NaN。纵向合并尽量保证变量名称一样,否则没啥意义。
pd.concat([df1,df2],axis=1,join='outer')df1.reset_index(drop=True,inplace=True) #如果合并前DFrame索引没有忽视掉,可通过这个方法重置索引。#how是右连接,意思右面全输出,左面id和ID能匹配的输出,否则NaN。how:right,left,inner,outer.
a = pd.merge(left=df1,right=df2,how='right',left_on='id',right_on='ID')

层次化索引

在一个轴上拥有两个或者两个以上的索引。
(1)使用loc语句进行访问
(2)loc里面接受tuple,如loc[(a,b),:]

df = pd.read_excel(r'D:\Anaconda\Work_file\test_data.xlsx',sheet_name=0,index_col=[3,4]) #index_col指明用数据的第几列作为索引。
df.index #查看一下当前索引
df.index.names #查看一下当前索引名字
df.loc[(123,23),:] #等价于df.loc[123].loc[23],tuple中第一个参数就是第一层索引名称,第二个参数就是第二层索引名称。
df.loc[([123],[23]),:] #对比一下,当对所有列取值时候给索引全部或其中某个加上[],展示形式是DF式。
df.loc[([123],23),'列三']
df.loc[(123,[23]),['列三']]#对比一下,当取列有条件时加上[],展示形式是DF式。

数据排序

data = pd.read_excel(r'D:\Anaconda\Work_file\test_data.xlsx',sheet_name=0,dtype={'列二':str})
np.sum(data.isnull(),axis=0) #先查看每列数据缺失值的个数。
data.sort_values('列四',ascending=True,na_position='last') #ascending升序,na_position缺失值排最后(first),返回视图。
data.sort_values(['列四','列五'],ascending=True,na_position='last') #取两列升序排列。
data.reset_index(drop=True) #,重置索引,返回视图,想作用于原数据要inplace。

分组聚合

data1 = data.groupby('列三') #用某列数据进行分组
data1.mean() #求分组后每列的均值,最大值,最小值,中位数,分位数等。
data1.size() #查看分组后每组元素个数,NaN不会被分组,故也查看不到个数。
data1.cumcount()
data1.agg([np.mean,np.sum]) #分组后对每列分别操作
data1.agg([np.mean,np.sum]).loc[['未知','男'],('列六',['mean','sum'])] #分组后筛选数据
data1.agg({'列四':np.sum,'列五':np.mean}) #分组对不同列进行不同统计
data1.agg({'列四':[np.sum,np.median],'列五':[np.mean,np.max]}) #分组对不同列进行多重统计,列表中的方法也可换成自定义的函数。

Pandas数据预处理

data = pd.read_excel(r'D:\Anaconda\Work_file\test_data.xlsx',sheet_name=0,dtype={'列四':float,'列二':str},na_values='暂无')
pd.to_datetime(data['列一'],format='%Y年%m月%d日',errors='coerce')#转换日期数据格式,errors:如果有日期格式和当前待转换不一致则转为空值,返回视图。
data['列七'].value_counts() #先看下该列数据情况,数据格式是否一致,发现该列有字符串‘暂无’,处理方法为在读入xlsx时添加参数(na_values='暂无')。
data['列七'] = data['列七'].str[:-1].astype('float') #把年龄字符型转为float型即:XX岁--XX.0
data['列一'] = pd.datetime.today() - data['列一'] #查看数据的记录时间到今天过了几天
data['列一'] #看到该列是时间戳的格式dtype: timedelta64[ns]
data['列一']/np.timedelta64(1,'D') #参数1是以1天为周期,换成7则以周为周期,30,365以此类推。
data['列一'] = (data['列一']/np.timedelta64(1,'D')).astype(int) #也可替换原数据中的列并取整。
data['列二'] = data['列二'].apply(lambda x: x.replace(x[1:2],'')) #发现原数据列二数据之间有\n,所以删除掉。
data['列二'].apply(lambda x: x.split('\n')[1]) #数据由某字符分割,故可用该方法取前半部分后后半部分,以\n分割成两个列表,取后面的。
data['列二'].str[0:2] #取某列数据的前三个字符,等同于data['列二'].apply(lambda x: x[0:2])。
data['列五变化率'] = data['列五'].pct_change() #求某列的变化率
data['列五的7日滑动平均'] = data['列五'].rolling(7).mean() #求某列的n步滑动平均(移动平均)。
data['列五变化率'].shift(1) #将某列数据向上(n)/下(-n)平移n个单位。

python数据分析-常用数据分析库之Pandas(下)相关推荐

  1. python的dropna函数_Python学习教程:从Excel到Python最常用的32个Pandas函数(一)

    原标题:Python学习教程:从Excel到Python最常用的32个Pandas函数(一) 本次的Python学习教程涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据 ...

  2. Python中常用图像处理库

    Python中常用图像处理库 文章目录 Python中常用图像处理库 1 OpenCV-Python 2 Numpy 3 matplotlib 4 skimage 5 PIL(Python Imagi ...

  3. python处理时间的标准函数库_python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫 ...

  4. python数据分析用什么库_Python数据分析常用的库总结

    Python之所以能够成为数据分析与挖掘领域的最佳语言,是有其独特的优势的.因为他有很多这个领域相关的库可以用,而且很好用,比如Numpy.SciPy.Matploglib.Pandas.Scikit ...

  5. python机器学习、数据分析常用第三方库(实时更新)

    常用镜像源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里:http://mirrors.aliyun.com/pypi/simple/ 豆瓣:http ...

  6. 最常用的Python爬虫和数据分析常用第三方库,收藏吧

    本次选题是先写好代码再写的文章,绝对可以用到页面元素解析,并且还需要对网站的数据加载有一定的分析,才能得到最终的数据,并且小编找的这两个数据源无 ip 访问限制,质量有保证,绝对是小白练手的绝佳之选. ...

  7. Python开发常用工具库

    本文汇总了在使用Python开发时常用到的第三方库和工具. 1.Python 官网地址:https://www.python.org/doc/ 博文地址:<Python编程:从入门到实践> ...

  8. 使用python操作常用的库-kafka

    安装kafka-python pip3 install kafka-python 生产者 producer_test.py ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:8576 ...

  9. Python实现房产数据分析与可视化 数据分析 实战

    Python库的选择 话说,工欲善其事,必先利其器,虽然我们已经选择Python来完成剩余的工作,但是我们需要考虑具体选择使用Pytho的哪些利器来帮助我们更快更好地完成剩余的工作. 我们可以看一下, ...

最新文章

  1. 《星际争霸2》引擎技术解析
  2. COALESCE语句解救sql的sum问题
  3. 版本控制(译文)-5 (连载)
  4. 中国商业智能(BI)市场发展趋势及未来投资潜力评估报告2022-2028年版
  5. sass学习记录及vue实践
  6. Nhibernate和 Entity Framework 4优缺点
  7. Redis 的应用场景
  8. 搜索提示时jquery的focusout和click事件冲突问题完美解决
  9. 信息学奥赛一本通(1132:石头剪子布)
  10. [20150518]关于块转储问题2.txt
  11. 报错TypeError: $(...).live is not a function解决方法
  12. Ubuntu禁用root登录
  13. Flask项目之手机端租房网站的实战开发(十三)
  14. 第一课 矩阵的行图像与列图像(麻省理工公开课:线性代数)【转载】
  15. android组件不能加适配器,Android 针对继承BaseAdapter的自定义适配器应注意的几个地方...
  16. 全国计算机二级java刷题软件_你知道的计算机二级刷题软件
  17. linux制作win7启动u盘
  18. 安卓电子书格式_求把 EPUB 转换成 MOBI 的电子书格式转换工具
  19. 电脑复制,电脑复制粘贴,详细教您电脑不能复制粘贴怎么办
  20. android如何正确获取iccid,特别是中间带有字母的iccid

热门文章

  1. oracle rac 火星舱_火星舱企业行业备份解决方案
  2. 伯南克回忆2008:金融危机如何演变为经济危机?------From凤凰财经20160430
  3. 联通大数据携U10峰会而来……
  4. SyncNet:基于Latency-Aware 的V2V协同感知
  5. 上海python培训比较好的机构-上海口碑好Python培训机构
  6. 江苏图采之证件照上传
  7. 这里有一份面筋请查收(一)
  8. AndServer浅显使用
  9. [渝粤教育] 浙江大学 2021秋冬管理学(施杰2) 参考 资料
  10. 好的决策是怎么产生的