Pandas读写数据与常用数据结构

目录

读/写不同数据源的数据

读取CSV文件

读取Excel文件

存储Excel文件

Series

创建Series

DataFrame

数据框的构造

基本属性

查改增删DataFrame数据

分析DataFrame数据

datetime

转换字符串时间为标准时间

提取时间序列数据信息

加减时间数据

⚫ pandas是强大的数据分析和处理工具。

⚫ Pandas常用的数据结构:

➢Series,带标签的一维数组

➢DatetimeIndex,时间序列

➢DataFrame,带标签且大小可变的二维表格结构

➢Panel,带标签且大小可变的三维数组

读/写不同数据源的数据

⚫ pandas内置了10余种数据源读取函数和对应的数据写入函数。

➢CSV文件

➢Excel文件

读取CSV文件

⚫ 使用read_table来读取文本文件。

pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

⚫ 使用read_csv函数来读取csv文件。

pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

Pandas读写数据与常用数据结构

⚫ read_table和read_csv函数中的sep参数是指定文本的分隔符的,如果分隔符指定错误,在读 取数据的时候,每一行数据将连成一片。

⚫ header参数是用来指定列名的,如果是None 则会添加一个默认的列名。

⚫ encoding代表文件的编码格式,常用的编码有 utf-8、utf-16、gbk、gb2312、gb18030等。 如果编码指定错误数据将无法读取,IPython解释器会报解析错误。

⚫ 结构化数据可以通过pandas中的to_csv函数实现以csv文件格式存储文件DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, columns=None, header=True, index=True,index_label=None,mode=’w’,encoding=None)

参数名称说明path_or_buf接收string。代表文件路径。无默认。sep接收string。代表分隔符。默认为”,”。na_rep接收string。代表缺失值。默认为””。columns接收list。代表写出的列名。默认为 None。header接收boolean,代表是否将列名写出。 默认为True。index接收boolean,代表是否将行名(索 引)写出。默认为True。index_labels接收sequence。表示索引名。默认 为None。mode接收特定string。代表数据写入模式。 默认为w。encoding接收特定string。代表存储文件的编 码格式。默认为None。

读取Excel文件

⚫ pandas提供了read_excel函数来读取 “xls””xlsx”两种Excel文件

pandas.read_excel(io, sheet_name=0, header=0, index_col=None, names=None, dtype=None)

参数名称说明io接收string。表示文件路径。无默认。sheetname接收string、int。代表excel表内数据的分表位置。默认为0。header接收int或sequence。表示将某行数据作为列名。默认为infer,表示自动识别。names接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多 重索引。默认为None。index_col接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多 重索引。默认为None。dtype接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为 None。

存储Excel文件

⚫ 将文件存储为Excel文件,可以使用to_excel方法。其语法格式如下。 DataFrame.to_excel(excel_writer=None, sheetname=None’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)

⚫ to_csv方法的常用参数基本一致,区别之处在于指定 存储文件的文件路径参数名称为excel_writer,并且没有sep参数,增加了一个sheetnames参数用来指定存储的Excel sheet的名称,默认为sheet1。

Series

⚫ pandas提供的一维数组,由索引和值两部分组成。

⚫ 其中值的类型可以不同。

⚫ 如果在创建时没有明确指定索引则会自动使用从0开始的非负整数作为索引。

创建Series

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

#例9.3:series创建一维数组
import pandas as pd
import numpy as np
#自动创建从0开始的非负整数索引
s1 = pd.Series(range(1, 20, 5))
#使用字典创建Series,使用字典的键作为索引
s2 = pd.Series({'语文':90, '数学':92, 'Python':98, '物理':87, '化
学':92})
#使用array创建Series
s3 = pd.Series(np.arange(5,10), index=['a', 'b', 'c', 'd', 'e'])

⚫ 通过索引的方式选取Series中的单个或一组值

print(s1[3])
s1[3] = -17
print(s1)
print(s2['语文'])
s2['语文'] = 94
print(s2[['语文', 'Python’]])
print(s2[s2.values >= 90])
print(s3[s3.index != 'd'])

⚫ 基本运算

s2.mean() #均值
s2.median() #中位数
s2.sum() #求和
s2.std() #标准差
s2.mode() #众数
s2.value_counts() #每个值的数量
s2/2 #对每个值除2
s2 //2 #对每个值除2后取整
s2 %2 #取余
s2 **2 #求平方
np.sqrt(s2) #求开方
np.log(s2) #求对数
s3=s3.drop(‘b’)#删除数据

DataFrame

数据框的构造

➢pandas.DataFrame(data=None, index=None, columns=None)

✓ data:ndarray、list 或dict

✓index:行索引

✓columns:列名列表

import pandas as pd
d=[[1.3,2.0,3,4],[2,4,1,4],[2,5,1.9,7],[3,1,0,11]]
df = pd.DataFrame(d,index=['a','b','c','d'],columns=list('ABCD'))
print(df)
df1 = pd.DataFrame(index=['1','2'],columns=['b','c']) #生成缺失值矩阵
print(df1)
df2 = pd.DataFrame(0,index=['1','2'],columns=['b','c']) #生成全零矩阵
print(df2)
d={'color':['blue','green','yellow','red','white'],
'object':['ball','pen','pencil','paper','mug'],'price':[1.2,1.0,0.6,0.9,1.7]}
df3 = pd.DataFrame(d,index=['a','b','c','d','e'])
print(df3)

基本属性

函数返回值values元素index索引columns列明dtypes类型size元素个数ndim维度数shape数据形状(行列数目)

查改增删DataFrame数据

⚫ 查看访问DataFrame中的数据——数据基本查看方式

➢对单列数据的访问:DataFrame的单列数据为一 个Series。

有以下两种方式来实现对单列数据的 访问。

✓以字典访问某一个key的值的方式使用对应的列名, 实现单列数据的访问。

✓以属性的方式访问,实现单列数据的访问。(不建议使用,易引起混淆)

⚫ 对某一列的某几行访问:

➢访问DataFrame中某一列的某几行时,单独一列 的DataFrame可以视为一个Series。

⚫ 对多列数据访问:

➢访问DataFrame多列数据可以将多个列索引名称视为一个列表,同时访问DataFrame多列数 据中的多行数据和访问单列数据的多行数据方法基本相同。

⚫ 对某几行访问:

➢如果只是需要访问DataFrame某几行数据的实现 方式则和上述的访问多列多行相似,选择所有 列,使用”:”代替即可。

➢head和tail也可以得到多行数据,但是用这两种 方法得到的数据都是从开始或者末尾获取的连 续数据。默认参数为访问5行,只要在方法后方 的”()”中填入访问行数即可实现目标行数的查看。

⚫ 查看访问DataFrame中的数据——loc,iloc 访问方式

➢loc方法是针对DataFrame索引名称的切片方法, 如果传入的不是索引名称,那么切片操作将无 法执行。利用loc方法,能够实现所有单层索引 切片操作。 DataFrame.loc[行索引名称或条件, 列索引名称]

➢iloc和loc区别是iloc接收的必须是行索引和列索引的位置。 DataFrame.iloc[行索引位置, 列索引位置]

➢使用loc方法和iloc实现多列切片,其原理的通俗解释就是将多列的列名或者位置作为一个列表或者数据传入。

➢使用loc,iloc方法可以取出DataFrame中的任意数据。

➢在loc使用的时候内部传入的行索引名称如果为一 个区间,则前后均为闭区间;iloc方法使用时内部 传入的行索引位置或列索引位置为区间时,则为前闭后开区间。

➢loc内部还可以传入表达式,结果会返回满足表达式的所有值。

➢loc更加灵活多变,代码的可读性更高,iloc的代码简洁,但可读性不高。具体在数据分析工 作中使用哪一种方法,根据情况而定,大多数时候建议使用loc方法。

⚫ 更新修改DataFrame中的数据

➢更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。

➢需要注意的是,数据更改直接针对DataFrame 原数据更改,操作无法撤销,如果做出更改, 需要对更改条件做确认或对数据进行备份。

⚫ 为DataFrame增添数据

➢DataFrame添加一列的方法非常简单,只需要新建一个列索引。并对该索引下的数据进行赋 值操作即可。

➢新增的一列值是相同的则直接赋值一个常量即可。

⚫ 删除某列或某行数据

➢删除某列或某行数据需要用到pandas提供的方法 drop,drop方法的用法如下。

➢axis为0时表示删除行,axis为1时表示删除列。drop(labels, axis=0, level=None, inplace=False, errors=’raise’)

⚫ 常用参数如下所示。

参数名称说明lables接收string或array。代表删除的行或列的标签。无默认。axis接收0或1。代表操作的轴向。默认为0。levels接收int或者索引名。代表标签所在级别。默认为None。inplace接收boolean。代表操作是否对原数据生效。默认为False。

分析DataFrame数据

⚫ 数值型特征的描述性统计——NumPy中的描述性统计函数

➢数值型数据的描述性统计主要包括了计算数值型数 据的完整情况、最小值、均值、中位数、最大值、 四分位数、极差、标准差、方差、协方差和变异系数等。

➢pandas库基于NumPy,自然也可以用这些函数对数据框进行描述性统计。

Pandas读写数据与常用数据结构

⚫ 数值型特征的描述性统计—— pandas描述 性统计方法

➢pandas还提供了更加便利的方法来计算均值 , 如detail[‘amounts’].mean()。

➢pandas还提供了一个方法叫作describe,能够一次性得出数据框所有数值型特征的非空值数 目、均值、四分位数、标准差。

Pandas读写数据与常用数据结构

⚫ 类别型特征的描述性统计

➢描述类别型特征的分布状况,可以使用频数统计表。pandas库中实现频数统计的方法为 value_counts。

➢pandas提供了categories类,可以使用astype方法将目标特征的数据类型转换为category类别。

➢describe方法除了支持传统数值型以外,还能够支持对category类型的数据进行描述性统计, 四个统计量分别为列非空元素的数目,类别的数目,数目最多的类别,数目最多类别的数目。

datetime

⚫ 转换字符串时间为标准时间

➢在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准时间 类型。

➢pandas继承了NumPy库和datetime库的时间相关模块,提供了6种时间相关的类。

类名称说明Timestamp最基础的时间类。表示某个时间点。在绝大多数的场景中的 时间数据都是Timestamp形式的时间。Period表示单个时间跨度,或者某个时间段,例如某一天,某一小 时等。Timedelta表示不同单位的时间,例如1天,1.5小时,3分钟,4秒等, 而非具体的某个时间段。DatetimeIndex一组Timestamp构成的Index,可以用来作为Series或者 DataFrame的索引。PeriodtimeIndex一 组 Period 构成的 Index , 可 以 用 来 作 为 Series 或 者DataFrame的索引。TimedeltaIndex一组Timedelta构成的Index,可以用来作为Series或者 DataFrame的索引。

转换字符串时间为标准时间

⚫ Timestamp

➢ 其中Timestamp作为时间类中最基础的,也是最为常用的。在多数情况下,时间相关的字符 串都会转换成为Timestamp。

➢ pandas提供了to_datetime函数,能够实现这一目标。

➢ 值得注意的是,Timestamp类型时间是有限制的。

⚫ DatetimeIndex与PeriodIndex函数

➢ 除了将数据字原始DataFrame中直接转换为 Timestamp格式外,还可以将数据单独提取出 来将其转换为DatetimeIndex或者PeriodIndex。

➢ 转换为PeriodIndex的时候需要注意,需要通过 freq参数指定时间间隔,常用的时间间隔有Y为 年,M为月,D为日,H为小时,T为分钟,S为秒。两个函数可以用来转换数据还可以用来创建时间序列数据,其参数非常类似。

⚫ DatetimeIndex是用来指代一系列时间点的一种数据结构,而PeriodIndex则是用来指代一系列时间段的数据结构。

参数名称说明data接收array。表示DatetimeIndex的值。无默认。frep接收string。表示时间的间隔频率。无默认。start接收string。表示生成规则时间数据的起始点。无默认。periods表示需要生成的周期数目。无默认。end接收string。表示生成规则时间数据的终结点。无默认。tz接收timezone。表示数据的时区。默认为None。name接收int,string。默认为空。指定DatetimeIndex的名字。

提取时间序列数据信息

⚫ Timestamp类常用属性

➢ 在多数涉及时间相关的数据处理,统计分析的过程中,需要提取时间中的年份,月份等数据。 使用对应的Timestamp类属性就能够实现这一 目的。

➢ 结合Python列表推导式,可以实现对 DataFrame某一列时间信息数据的提取。

Pandas读写数据与常用数据结构

⚫ 在DatetimeIndex和PeriodIndex中提取信息

➢ 在DatetimeIndex和PeriodIndex中提取对应信 息可以以类属性方式实现。

➢ 值得注意的是PeriodIndex相比于DatetimeIndex少了day_name属性,所以不能够用该属性提取星期名称数据。若想要提取信息名称可以通过提取weekday属性,而后将0-6 七个标签分别赋值为Monday至Sunday。

加减时间数据

⚫ Timedelta类

➢ Timedelta是时间相关的类中的一个异类,不仅能够使用正数,还能够使用负数表示单位时间, 例如1秒,2分钟,3小时等。

➢ 使用Timedelta类,配合常规的时间相关类能够轻松实现时间的算术运算。

➢ 目前Timedelta函数中时间周期中没有年和月。

Pandas读写数据与常用数据结构

本次内容到此结束,感谢观看,如有不正之处,敬请斧正

码字不易,你的点赞就是给我最大的动力!!

Original: https://blog.csdn.net/weixin_63641028/article/details/124880351
Author: Coder Zhang
Title: Pandas读写数据与常用数据结构

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676714/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球