当前位置: 首页 > news >正文

python数据处理(pandas)

# 新的数据格式,csv
  • 纯文本,使用某个字符集,比如都是ASCII、Unicode、EBCDIC或GB2312(简体中文环境)等;
  • 由记录组成(典型的是每行一条记录)
  • 每条记录被分隔符(英语:Delimiter)分隔为字段(英语:Field(computer science))(典型分隔符号有逗号、分号或制表符;有时分隔符可以包括可选的空格)
  • 每条记录都有同样的字段序列
import pandas as pd 
import numpy as np
abs_path = r'F:\Python\learn\python附件\pythonCsv\data.csv'
df = pd.read_csv(abs_path,encoding='gbk')
df.head(2)
序号姓名性别语文数学英语物理化学生物
01渠敬辉806030403060
12韩辉909575758085
type(df)
pandas.core.frame.DataFrame

DataFrame

# 列名
print(df.columns)
# 索引
print(df.index)
Index(['序号', '姓名', '性别', '语文', '数学', '英语', '物理', '化学', '生物'], dtype='object')
RangeIndex(start=0, stop=7, step=1)
df.loc[0]
序号      1
姓名    渠敬辉
性别      男
语文     80
数学     60
英语     30
物理     40
化学     30
生物     60
Name: 0, dtype: object
a = np.array(range(10))
a > 3
array([False, False, False, False,  True,  True,  True,  True,  True,True])
# 筛选数学成绩大于80
df[df.数学 > 80]
序号姓名性别语文数学英语物理化学生物
12韩辉909575758085
34石天洋909095807580
df[df.数学 < 80]
序号姓名性别语文数学英语物理化学生物
01渠敬辉806030403060
45张三606060606060
67王五707070707070
# 复杂筛选
df[(df.语文 > 80) & (df.数学 > 80) & (df.英语 > 80)]
序号姓名性别语文数学英语物理化学生物
34石天洋909095807580

排序

df.sort_values(['数学','语文','英语']).head()
序号姓名性别语文数学英语物理化学生物
45张三606060606060
01渠敬辉806030403060
67王五707070707070
56李四808080808080
23韩文晴958085608090

访问

# 按照索引去定位
df.loc[3]
序号      4
姓名    石天洋
性别      男
语文     90
数学     90
英语     95
物理     80
化学     75
生物     80
Name: 3, dtype: object

索引

scores = {'英语':[90,78,89],'数学':[64,78,45],'姓名':['wong','li','sun']
}
df = pd.DataFrame(scores,index=['one','two','three'])
df
英语数学姓名
one9064wong
two7878li
three8945sun
df.index
Index(['one', 'two', 'three'], dtype='object')
# 因为此时不存在数字索引,所以不能通过数字索引去访问
# df.loc[1]
df.loc['one']
英语      90
数学      64
姓名    wong
Name: one, dtype: object
# 实实在在的所谓的第几行
df.iloc[0]
英语      90
数学      64
姓名    wong
Name: one, dtype: object
# 合并了loc和iloc的功能,新版本下ix方法已被弃用
df.ix[0]
---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-22-413c174d3cd1> in <module>1 # 合并了loc和iloc的功能
----> 2 df.ix[0]G:\Anaconda\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)5272             if self._info_axis._can_hold_identifiers_and_holds_name(name):5273                 return self[name]
-> 5274             return object.__getattribute__(self, name)5275 5276     def __setattr__(self, name: str, value) -> None:AttributeError: 'DataFrame' object has no attribute 'ix'
df.loc[:2]
序号姓名性别语文数学英语物理化学生物
01渠敬辉806030403060
12韩辉909575758085
23韩文晴958085608090
# 当索引为数字索引的时候,ix和loc是等价的,新版本下ix方法已被弃用
df.ix[:2]
---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-33-a97de2692f80> in <module>1 #当索引为数字索引的时候,ix和loc是等价的
----> 2 df.ix[:2]G:\Anaconda\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)5272             if self._info_axis._can_hold_identifiers_and_holds_name(name):5273                 return self[name]
-> 5274             return object.__getattribute__(self, name)5275 5276     def __setattr__(self, name: str, value) -> None:AttributeError: 'DataFrame' object has no attribute 'ix'
# 访问某一行,是错误的
# df[0]# 访问多行数据是可以使用切片的
df[:2]
序号姓名性别语文数学英语物理化学生物
01渠敬辉806030403060
12韩辉909575758085
# dataframe中的数组
df.数学.values
array([60, 95, 80, 90, 60, 80, 70], dtype=int64)
# 简单的统计
df.数学.value_counts()
60    2
80    2
95    1
70    1
90    1
Name: 数学, dtype: int64
# 提取多列
new = df[['数学','语文']].head()
new
数学语文
06080
19590
28095
39090
46060
new * 2
数学语文
0120160
1190180
2160190
3180180
4120120

重点

def func(score):if score>=80:return '优秀'elif score>=70:return '良'elif score>=60:return '及格'else:return '不及格'passdf['数学分类'] = df.数学.map(func)
df.head()
序号姓名性别语文数学英语物理化学生物数学分类
01渠敬辉806030403060及格
12韩辉909575758085优秀
23韩文晴958085608090优秀
34石天洋909095807580优秀
45张三606060606060及格
# applymap对dataframe中所有的数据进行操作的一个函数,非常重要
def func(number):return number + 10
# 等价
func = lambda number : number + 10df.applymap(lambda x : str(x) + ' - ').head(2)
序号姓名性别语文数学英语物理化学生物数学分类
01 -渠敬辉 -男 -80 -60 -30 -40 -30 -60 -及格 -
12 -韩辉 -男 -90 -95 -75 -75 -80 -85 -优秀 -

匿名函数

# 列表推导式
[i+100 for i in range(10)]
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
def func(x):return x + 100
list(map(func,range(10)))
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
# 匿名函数的使用条件:
# 1.函数就一行
# 2.函数不经常使用
# 3.函数没有必要取名字
list(map(lambda x : x+100,range(10)))
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
# apply根据多列生成新的一个列的操作,用apply
df['new_score'] = df.apply(lambda x : x.数学 + x.语文, axis=1)
# 前几行
df.head(2)
# 最后几行
df.tail(2)
序号姓名性别语文数学英语物理化学生物数学分类new_score
56李四808080808080优秀160
67王五707070707070140

panda中的dataframe的操作,很大一部分跟numpy中的二位数组的操作是近似的

http://www.lryc.cn/news/341637.html

相关文章:

  • 微信小程序开发秘籍:玩转麦克风录音与音频上传【代码示例】
  • spring的核心详解
  • 一、写给Android开发者之harmony入门
  • C++常用库函数——strstr、strcat
  • Kafak 消费异常:The coordinator is not available.
  • JavaScript中的对象
  • Oracle对空值(NULL)的 聚合函数 排序
  • 我独自升级崛起下载教程 我独自升级崛起一键下载
  • RS2057XH功能和参数介绍及规格书
  • ICML 2024有何亮点?9473篇论文投稿,突破历史记录
  • U盘提示“被写保护”无法操作处理怎么办?
  • 算法训练营第二十天 | LeetCode 110平衡二叉树、LeetCode 257 二叉树的所有路径、LeetCode 404 左叶子之和
  • Docker:centos7安装docker
  • EasyExcel导出工具类
  • 【Godot4.2】EasyTreeData通用解析
  • 力扣每日一题109:有序链表转换二叉搜索树
  • 企业计算机服务器中了locked勒索病毒怎么处理,locked勒索病毒解密建议
  • 开源推荐榜【MalusAdmin基于 Vue3/TypeScript/NaiveUI 和 NET7 Sqlsugar 开发的后台管理框架】
  • 批量抓取某电影网站的下载链接
  • 2024-05-06 问AI: 介绍一下深度学习中的LSTM网络
  • 二、Redis五种常用数据类型-String
  • echarts柱状图实现左右横向对比
  • 脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)
  • spring笔记2
  • 【挑战30天首通《谷粒商城》】-【第一天】02、简介-项目整体效果展示
  • Kafka 生产者应用解析
  • GEE错误——image.reduceRegion is not a function
  • rk356x 关于yocto编译linux及bitbake实用方法
  • Chrome您的连接不是私密连接 |输入“thisisunsafe”命令绕过警告or添加启动参数
  • 牛客面试前端1