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

十.pandas方法总结Numpy

目录

十.pandas方法总结

1.索引切片

2.数据排序

3.数据统计

Pandas数据计算

4.数据查看

5.数据清洗

6-数据分组

查看分组结果

7-处理第三方数据

csv文件操作

Excel文件操作

Excel文件读取read_excel

Excel文件写入 to_excel()

SQL操作

mysql读取

数据保存

pandas处理字符串

数据操作

1-数据添加&插入

2-数据删除

3-重置索引&重命名标签&设置索引列

4-对象拼接

常用属性和方法汇总

numpy操作总结

1-创建ndarray对象:

2-方法总结


十.pandas方法总结


1.索引切片

slice(2, 9, 3)#从索引2开始到索引9停止,步长为2
arr_data[2:9:2]通过冒号来分割切片参数.
arr_data[1:]从[1:]索引处开始切割
arr_num[1, ...]返回数组的第二行
arr_data[[0, 1, 2], [0, 1, 0]][0,1,2]代表行索引;[0,1,0]代表列索引
# 行索引 width_data = np.array([[0, 0], [3, 3]]) # 列索引 height_data = np.array([[0, 2], [0, 2]]) new_data = arr_data[width_data, height_data]获取了 4*3 数组中的四个角上元素,它们对应的行索引是 [0,0] 和 [3,3],列索引是 [0,2] 和 [0,2]。
arr_num[1:4, [1, 2]]行使用基础索引,对列使用高级索引.
print(arr_data[arr_data > 6])返回结果大于六的数字数组
# np.isnan(x) 可以判断x是否为空值 print(arr_data[~np.isnan(arr_data)])np.nan是一个float类型的数据,表示不是一个数字
df_data["语文"]选取指定的列.
df_data.loc["张三"]选取指定的.
df_data.loc[["张三","王五","坤哥"],["语文","数学","地理"]]选取指定的行和列.
df_data.loc["张三","语文"]选取值.
df.iloc[2] .iloc[1:3, 1:4]iloc函数只能通过整数索引取值.

df_data = pd.DataFrame(np.random.randint(65,95,size=(5,6)),index=["张三","李四","王五","赵六","坤哥"],columns=["语文","数学","英语","政治","历史","地理"]
)
df_data
​
# 选取指定的列
df_data["语文"]
​
# 选取指定的行
df_data.loc["张三"]
​
# 选取指定的行和列
df_data.loc[["张三","王五","坤哥"],["语文","数学","地理"]]
​
# 选取值
df_data.loc["张三","语文"]
df.columns  #返回列表,列标签.
# 整体修改,上面复制过来直接进行修改
# df.columns = ['颜色', '姓名', 'num_critic_for_reviews', 'duration',
#               'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
#               'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
#               'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
#               'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
#               'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
#               'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
#               'imdb_score', 'aspect_ratio', 'movie_facebook_likes']
# print(df.head())
#
-----------------------------------
​
# 转化为列表之后修改
my_columns = list(df.columns)
my_columns[0] = "颜色色"
df.columns = my_columns
print(df.head())

2.数据排序

df.sort_index(ascending=True)按index排序. 默认升序,ascending=False降序
df.sort_index(axis=1)列标签排序
df.sort_values(by='col2', kind="mergesort")按值排序. 与标签排序类似,sort_values() 表示按值排序。它接受一个by参数,该参数值是要排序数列的 DataFrame 列名 sort_values() 提供了参数kind

df_data = pd.DataFrame(np.random.randint(65,95,size=(5,6)),index=[1,4,6,2,3],columns=["语文","数学","英语","政治","历史","地理"]
)
​
# 默认升序,ascending=False降序
# 根据标签进行排序
df_data.sort_index()
​
# 根据某一列值进行排序
df_data.sort_values(by="语文",ascending=False)

3.数据统计

Pandas数据计算

函数名称描述说明
count()统计某个非空值的数量。
sum()求和
mean()求均值
median()求中位数
mode()求众数
std()求标准差
min()求最小值
max()求最大值
abs()求绝对值
describe()计算基本统计信息,如均值、标准差、最小值、最大值等。

在 DataFrame 中,使用聚合类方法时需要指定轴(axis)参数。下面介绍两种传参方式:

  • 对行操作,默认使用 axis=1 或者使用 "index";------行

  • 对列操作,默认使用 axis=0 或者使用 "columns"。-----列

df_data = pd.DataFrame(np.random.randint(65,95,size=(5,6)),index=[1,4,6,2,3],columns=["语文","数学","英语","政治","历史","地理"]
)
​
# 计算基本统计信息,如均值、标准差、最小值、最大值等。
df_data.describe()
​
# 计算每列的平均值。
df_data.mean()
​
# 计算每列的中位数。
df_data.median()
​
# 计算每列非缺失值的数量。
df_data.count()

4.数据查看

函数说明
df.head(n)显示前 n 行数据;
df.tail(n)显示后 n 行数据;
df.info()显示数据的信息,包括列名、数据类型、缺失值等;
df.describe()显示数据的基本统计信息,包括均值、方差、最大值、最小值等;
df.shape显示数据的行数和列数。
query(" ")# 按条件筛选 # df_data.query("(A>10) and (B>12)") # 筛选指定列 # df_data.query("(A>10) & (B>12)")[["demo","C","D"]] # 筛选某一列 # df_data[df_data["demo"] == "python"] # df_data.query('demo == "python"')
isin()返回bool类型.xxx.xxx.isin()
apply()df_data.apply(lambda x:x.sum()-x.max(),axis="index")
df_data.info()显示df_data的基础信息

5.数据清洗

函数说明
df.dropna()删除包含缺失值的行或列; DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
df.fillna(value)将缺失值替换为指定的值;
df.replace(old_value, new_value)将指定值替换为新值;
df.duplicated()检查是否有重复的数据;
df.drop_duplicates()删除重复的数据。
isnull()检测某一列是否为空值.
miss_value = ['--',18] data = pd.read_csv('student.csv',na_values=miss_value)自定义空值类型.
pd.to_datetime()自动修改日期格式.

6-数据分组

df_data.groupby("company").agg("mean")
#可结合数据计算一起使用
​
df_data.groupby("year")[["GDP", "year"]].mean()
df_data.groupby("country").agg({"GDP":"mean","year":"median"})
df_data.groupby("country")[["GDP", "year"]].agg(["mean","std"])
df_data.groupby(["year", "country"])[["GDP", "year"]].mean()
​
# 统计个数去重
df_data.groupby("year")[["country"]].nunique()
​
# 统计出现的国家数
df_data["country"].nunique()
​
# 统计出现的国家
df_data["country"].unique()

查看分组结果

通过调用groups属性查看分组结果.

print(df_data.groupby('year').groups)
#{1990: [2, 4], 1992: [0, 7], 1994: [8], 1995: [5], 1997: [3], 1998: [1, 6, 9]}

7-处理第三方数据

csv文件操作

read_csv()
read_json()
pd.read_csv("./number_data/student.csv", encoding="utf-8")file=r'E:/././student.csv' data=pd.read_csv(file,encoding='utf-8')
index_col在 CSV 文件中指定了一个,然后使用index_col可以实现自定义索引。 pd.read_csv("./number_data/student.csv", encoding="utf-8", index_col=["Name"])
df.dtypes查看原先的数据类型.
pd.read_csv("./number_data/student.csv", encoding="utf-8", dtype={'Salary': np.float64})转换salary为float类型(字典形式)
names 参数更改文件标头名(列的标签) pd.read_csv("./number_data/student.csv", encoding="utf-8", names=["a","b","c","d","e"]) --加上header=0参数,就会删除原有的标头名.
skiprows参数表示跳过指定的行数。 (跳过前几行!!!) skiprows=1
to_csv()data = {'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']} info = pd.DataFrame(data) csv_data = info.to_csv("./number_data/student.csv")

Excel文件操作

Excel文件读取read_excel
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,usecols=None, squeeze=False,dtype=None, engine=None,converters=None, true_values=None, false_values=None,skiprows=None, nrows=None, na_values=None, parse_dates=False,date_parser=None, thousands=None, comment=None, skipfooter=0,convert_float=True, **kwds)
参数名称说明
io表示 Excel 文件的存储路径。
sheet_name要读取的工作表名称。
header指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置 为 header=2,则表示将前两行作为多重索引。
names一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。
index_col用做行索引的列,可以是工作表的列名称,如 index_col = '列名',也可以是整数或者列表。
usecolsint或list类型,默认为None,表示需要读取所有列。
squeezeboolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
converters规定每一列的数据类型。
skiprows接受一个列表,表示跳过指定行数的数据,从头部第一行开始。
nrows需要读取的行数。
skipfooter接受一个列表,省略指定行数的数据,从尾部最后一行开始。
Excel文件写入 to_excel()
# 创建DataFrame数据
data = pd.DataFrame({'name': ['张三', '李四', '王五', '赵六'],'rank': [1, 2, 3, 4],'language': ['PHP', 'C', 'PHP', 'Python'],'url': ['www.zhangsan.com', 'c.lisi.net', 'www.wangwu.com', 'www.zhaoliu.com']})
# 创建ExcelWrite对象
writer = pd.ExcelWriter('datas.xlsx')
data.to_excel(writer)
writer.save()

SQL操作

index_col 属性充当行标签 data = pd.read_sql(sql_one, con=coon,index_col="house_five")
将数据写入Excel#创建ExcelWrite对象. writer = pd.ExcelWriter('website.xlsx') data.to_excel(writer) writer.save()

mysql读取
import pandas as pd
import pymysql
coon = pymysql.connect(host="127.0.0.1",port=3306,user="root",password=" ",db="库名"
)
sql_one = "select * from house"
print(pd.read_sql(sql_one,con=coon))
​
sql_two = "select * from house where id > 10"
print(pd.read_sql(sql_two, con=coon))

数据保存

​
df.iloc[:3, :].to_csv("./movie_new.csv")
df.iloc[:3, :].to_excel("./movie_new.xlsx",sheet_name="xxx")

pandas处理字符串

函数名称函数功能和描述
lower()将的字符串转换为小写。
upper()将的字符串转换为大写。
len()得出字符串的长度。
strip()去除字符串两边的空格(包含换行符)。
split()用指定的分割符分割字符串。
cat(sep="")用给定的分隔符连接字符串元素。
contains(pattern)如果空子字串包含在元素中,则为每个元素返回一个布尔值 True,否则为 False。
replace(a,b)将值 a 替换为值 b。
count(pattern)返回每个字符串元素出现的次数。
findall(pattern)以列表的形式返出现的字符串。
isnumeric()返回布尔值,检查 Series 中组成每个字符串的所有字符是否都为数字。
repeat(value)以指定的次数重复每个元素。
find(pattern)返回字符串第一次出现的索引位置.

数据操作

1-数据添加&插入

df[]=value插入到最后面.# 添加列(存在进行修改,不存在进行添加.)
insert() df.insert(1, column='score', value=[91, 90, 75])第一个参数为插入列的位置;(插入到前面)
append()将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行.
df.insert(0, "new_money", value=df["gross"] - df["budget"])#在指定的位置进行添加.

2-数据删除

del del xxx['column']删除 DataFrame 中的数据
pop()删除 DataFrame 中的数据
drop('标签')删除一行.使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除.
df.drop(2, axis=0).head() df.drop("color",axis="columns").head()# 删除索引行 # 删除具体列

3-重置索引&重命名标签&设置索引列

df_new = df.reindex(index=[0, 2, 5], columns=['Time', 'Name', 'Age'])只获取0 2 5行,Time,Name,Age列
rename() df.rename(columns={'Name': '姓名', 'Age': '年龄', "height": "身高"}, index={0: 'first', 1: 'second', 2: 'third'})对行和列重新命名.
df_data.set_index(keys='Name')设置索引列 keys : 要设置为索引的列名(如有多个应放在一个列表里) (列值-->列标签) drop : 将设置为索引的列删除,默认为True 保留当前列+(列值-->列标签) append : 是否将新的索引追加到原索引后(即是否保留原索引),默认为False inplace : 是否在原DataFrame上修改,默认为False

4-对象拼接

concat() pd.concat([df_one,df_two])如果想让输出的 行索引 遵循依次递增的规则,那么需要将 ignore_index 设置为 True pd.concat([df_one,df_two],axis="index",ignore_index=True)
append()a.append(b) 单独链接一个Dataframe对象 a.append([b,c]) 连接多个Dataframe对象

常用属性和方法汇总

DataFrame 的属性和方法,与 Series 相差无几.

名称属性&方法描述
T行和列转置。
axes返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes返回每列数据的数据类型。
emptyDataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim轴的数量,也指数组的维数。
shape返回一个元组,表示了 DataFrame 维度。
sizeDataFrame中的元素数量。
values使用 numpy 数组表示 DataFrame 中的元素值。
head()返回前 n 行数据。
tail()返回后 n 行数据。

numpy操作总结

1-创建ndarray对象:

numpy.array(object, dtype=None, copy=True, order=None,ndmin=0)
序号参数描述说明
1object表示一个数组序列。
2dtype可选参数,通过它可以更改数组的数据类型。
3copy可选参数,表示数组能否被复制,默认是 True。
4order以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)。
5ndmin用于指定数组的维度。/也可查看(.ndium)


2-方法总结

函数
numpy_data.reshape()reshape(4, 3) 可以改变多维数组行数和列数,从而达到数组变维的目的
numpy.arange(start, stop, step, dtype)创建给定数值范围的数组.
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)返回均匀间隔的一维等差数组,默认均分 50 份.
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)返回一个 ndarray 数组,它用于创建等比数组.
np.random.randint(low=5,high=10,size=(30,8))

相关文章:

  • 数据结构——双向链表(C语言版)
  • 20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
  • 20240318-2-推荐算法Graph_Embedding
  • C++ 的标准模板库(STL)常用算法介绍
  • 微信小程序事件处理
  • 操作系统内功篇:硬件结构之软中断
  • 树形递归模板
  • 面试算法-88-反转链表
  • 【软件测试_黑白盒测试】白盒测试黑盒测试 区别
  • window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
  • [Repo Git] manifests的写法
  • 【LLM多模态】Cogvlm图生文模型结构和训练流程
  • mysql的实训操作任务指南
  • 2024.3.9|第十五届蓝桥杯模拟赛(第三期)
  • java 实现发送邮件功能
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Druid 在有赞的实践
  • leetcode46 Permutation 排列组合
  • Markdown 语法简单说明
  • oldjun 检测网站的经验
  • PAT A1120
  • PHP的类修饰符与访问修饰符
  • sessionStorage和localStorage
  • Theano - 导数
  • Zepto.js源码学习之二
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 算法之不定期更新(一)(2018-04-12)
  •  一套莫尔斯电报听写、翻译系统
  • 智能合约开发环境搭建及Hello World合约
  • postgresql行列转换函数
  • 阿里云ACE认证学习知识点梳理
  • #define用法
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.ajax()方法详解
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (vue)页面文件上传获取:action地址
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)Neo4j下载安装以及初次使用
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .aanva
  • .gitignore文件—git忽略文件
  • .net Application的目录
  • .NET BackgroundWorker
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net打印*三角形
  • .NET的微型Web框架 Nancy
  • @EnableAsync和@Async开始异步任务支持
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [Android Studio 权威教程]断点调试和高级调试