首页 > 其他分享 >十.pandas方法总结&Numpy

十.pandas方法总结&Numpy

时间:2024-03-21 16:58:16浏览次数:24  
标签:总结 index None df data 索引 csv Numpy pandas

目录

十.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))

标签:总结,index,None,df,data,索引,csv,Numpy,pandas
From: https://blog.csdn.net/2303_80857229/article/details/136913809

相关文章

  • 2023年护网新情况总结
    2023年护网新情况总结✦.甲方客户预算总体上降低了,甚至有的客户预算直接砍了一半。厂商、供应商、安全工程师都面临了不小的压力。甲方客户开始没有那么专业的安全人员,到招兵卖马,成立安全运营的部门,厂商工程师或早期护网人员及后来护网的人员逐渐进入甲方。所以甲方客户......
  • 2024-3-20 模拟赛总结
    tip:01串表示集合(bitset)T3buy60pts:枚举最大的bi,O(nlogn)按ai排序后选择前k-1个即可。100pts:先按bi排序用priority_queue存储前k个,从bi最小开始,扫一遍序列,每次O(logn)更新前k个。T4flight大模拟tip:写模拟时,可以分模块调试。......
  • jQuery基础总结
    1.1.jQuery介绍1.1.1JavaScript库JavaScript库:即library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等。简单理解:就是一个JS文件,里面对我们原生js代码进行......
  • 借助Numpy,优化Pandas的条件检索代码
    Numpy其实是最早的处理数据的Python库,它的核心ndarray对象,是一个高效的n维数组结构。通过这个库,可以高效的完成向量和矩阵运算,由于其出色的性能,很多其他的数据分析,科学计算或者机器学习相关的Python库都或多或少的依赖于它。Pandas就是其中之一,Pandas充分利用了NumPy的数组运算......
  • Git安装与使用总结
    Git分布式版本控制工具一、Git安装与配置Git基本配置打开GitBash设置用户信息#配置全局用户名和用户邮箱gitconfig--globaluser.namexxxgitconfig--globaluser.emailxxx@xx.com查看用户信息#查看用户名和用户邮箱gitconfig--globaluser.namegi......
  • 定时任务优化总结(从半个小时优化到秒级)
    整体优化思路:1.按需查询、2.分小批次游标查询、3.JED场景下按数据库分片分组更新、4.精准定位要处理的数据、5.负载均衡业务背景:  站外广告投放平台在做推广管理状态优化重构的时候,引入了四个定时任务。分别是单元时间段更新更新任务,计划时间段更新任务,单元预算撞线恢......
  • NumPy的矩阵运算
    #作者:小恒不会java#时间:2024年3月1日#微信:a13551458597importnumpyasnp#创建一个2x3的矩阵AA=np.array([[1,2,3],[4,7,9]])#获取矩阵A的形状shape_A=A.shape#对矩阵A进行转置运算得到矩阵BB=A.T#使用numpy的matmul函数进行矩阵乘法运算(注意......
  • 技术面试不知如何回答问题,没有思路 ,总结四种方法让你轻松应对(上)。
    目录1.基础问题类2.有明确答案的技术类问题想知道面试被问到那些问题,可以参考面试题,但若想通过背面试题来应对面试有点不太现实。毕竟面试10家,就会有10家不同的面试问题。我们不可能把所有的问题都背会,这样太耗时而且命中率还不高。更好的做法是将问题进行归类总结......
  • HTML5语法总结
    目录一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并单元格十二.表单标签1.input标签inp......
  • 复习第二天总结笔记3.19
    今天复习了以下内容1.掌握了变量的定义和使用重点记录Java常量优化机制2.使用Debug工具查看程序的执行流程3.使用Scanner键盘录入数据4.清楚算数符中/%的特点数值拆分公式5.掌握Java中的字符串拼接操作至于今天学习或者以前没了解完全的内容如下1.了解清楚自......