pandas 数据分析实战

一、pandas常用数据类型

· series,带标签的一维数组。类似于字典,但是键作为索引。

· datatimeindex,时间序列。

· dataframe,带标签且大小可变的二维表格结构。

· panel,带标签且大小可变的三维数组。

1.一维数组与操作 Series

s = pd.Series(range())

s = pd.Series(dict{ })

abs(s)

s + 5

s.add_prefix(x):在每个索引前面加上x

s.add_suffix(x):在每个索引后面加上x

#画出数据直方图

s.hist()

plt.show()

#最大索引

s.idxmax()

#查看值是否在指定区间内

s.between(a,b)

#查看满足某一条件的值

s[s>s.median()]

2.时间序列与操作

主要包括data_range函数和Timestamp类。

pd.data_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)

其中:

· start和end指定起止日期。

· periods指定生成的数据数量。

· freq指定时间间隔,默认是D,表示相邻两个日期相差多少。还有W 周、H 小时、M 月末最后一天、MS 月初第一天、T 分钟、Y 年末最后一天、YS 年初第一天。

pd.Timestamp('20241013'.day_name()) # 查看这天周几

pd.Timestamp('20241013'.is_leap_year) # 查看是否是闰年

pd.Timestamp('20241013'.quarter) # 查看季度

pd.Timestamp('20241013'.month) # 查看月份

3.二维数组DataFrame

可以看作一个二维表格(excel),由索引、列名、值组成。

pandas支持多种方式创建DF,如readcsv、readexcel等。

#生成5行6列1-20的随机数,自定义索引,自定义列。

df = pd.DataFrame(np.random.randint(1, 20, (5, 6)), index = range(5), columns = [])

#使用字典,作为值和索引

df = pd.DataFrame(dict{}, index=)

4.DF数据处理

excel读取

pandas.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,

keep_default_na=True,

verbose=False,

parse_dates=False,

date_parser=None,

thousands=None,

comment=None,

skipfooter=0,

convert_float=True,

mangle_dupe_cols=True,

**kwds

)

其中:

· io指定文件路径、对象。

· sheet_name:指定读取的worksheet,可以是sheet序号或是名字,或者是一个列表。如果值指定为None,则表示读取所有worksheet,并返回多个DF构成的字典。

· header指定worksheet中表示表头的行索引,默认为0。如果没有作为表头的行,必须明确写出header = None。

· skiprows:指定要跳过的行索引组成的列表。

· index_col:指定作为索引的列下标。

· names:指定读取数据后使用的列名。

· usecols:指定要读取的列的索引或名字。

· na_values:指定哪些值被解释为缺失值。

条件筛选

df[a: b]

df.iloc[index行, index列]:通过索引访问某行某列。

df.loc[index行,列名]:通过列名访问。

df.at[index行,列名]:同上。

df[行][列]:可以是列表可以是索引。

df[列名].sum()/max()/min()

df.列名

df[df[列名].isin([, , , ,])][列名].sum():找出满足条件的行。

#查看数据特征

df.describe():查看统计信息。包括总数 平均数 方差 最大最小等。

df.median()

df.nsmallest()

df.nlargest()

df[列名].idxmax()/idxmin():某列最小值/最大值,对应的行下标。

#对数据排序

sort_index(axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True):沿某个方向

其中:

· axis=0是按照行索引,axis=1是按照列索引。

· ascending默认表示升序,flase表示降序。

· inplace默认表示返回新的排序后的DF,True表示原地排序。

· na_position指定把缺失值放在哪里。last/first。

sort_values(by, 同上)

其中:

· by指定依据哪个列进行排序,支持列名/列表。

#分组和聚合

重点

groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

其中:

· by指定作用于index的函数、字典(根据键进行分组、值作为分组后的index),或指定列名作为分组依据。

· squeeze会在可能的情况下降低结果对象的维度。

#处理异常值 噪声

df[df[""]>x] = a,直接替换掉。

#处理缺失值

dropna(axis=0, how=any, thresh=None, subset=None, inplace=False)

其中:

· how=any表示某行只要存在缺失值就删掉这行,how=all表示某行全是缺失值才删除。

· thresh表示保留包含几个非缺失值数据的行。

· subset指定在判断缺失值的时候考虑哪些列。

fillna(value=None, method=None, axis=0, inplace=False, limit=None, downcast=None)

其中:

· value指定要替换的值。

· method指定填充值的方式,包括pad ffill,backfill bfill。

· limit指定设置method时最多填充多少个连续的缺失值。

处理重复值

duplicated(subset=None, keep='first') 检测重复值

其中:

· subset指定依据哪一列/多列判断重复。默认使用每行的所有列。

· keep=first表示将重读数据的第一次出现标记为false,keep=last表示重复数据最后一次出现标记为false,keep=false表示所有重复数据都是true。

df[df.duplicated()]

drop_duplicates(subset=None, keep='first', inplace=False) 删除重复值

#数据差分

可以看出来每行/每列的差距。

diff(periods=1, axis=0)

其中:

· axis=0表示纵向差分,axis=1表示横向差分。

· period指定差分的跨度,period=x表示每一行减去上面第x行的数据。

重采样

如果DF中索引是日期时间,可以使用resample()重采样,按照时间段统计。

resample(rule, how=None, axis=0, label=None, on=None)

其中:

· rule指定重采样的时间间隔,同时间序列的freq参数。

· on指定根据哪一列进行重采样,要求必须是日期时间类型。

· label=right指定使用采样时间的结束时间作为DF的index,label=left指定。。开始时间。。

多索引

DF支持多个索引,在groupby()和sort_index()方法中用level可以指定按照哪一级索引进行排序或分组。

pandas属性接口

Series对象和DF的列数据,提供了dt、str的属性接口,分别对应日期和字符串。通过接口可以快速实现特定功能。

dt接口:

· dayofweek, dayofyear, is_leap_year, quarter, day_name()等。

str接口:

· center, contains, count, endswith, find, extract, lower, split等。

数据拆分与合并

可以对DF进行切片 或者 loc按行按列运算进行拆分

可以用concat(objs, axis=0, join='outer')合并

其中:

· objs包含多个series DF panel对象 [序列]。

· axis默认为0,表示纵向合并。

可以用append(other, ignore_index=False)合并

可以忽略原来的索引。

相关推荐
肖永威28 分钟前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
SelectDB技术团队40 分钟前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris
nuclear20111 小时前
使用Python 在Excel中创建和取消数据分组 - 详解
python·excel数据分组·创建excel分组·excel分类汇总·excel嵌套分组·excel大纲级别·取消excel分组
Lucky小小吴1 小时前
有关django、python版本、sqlite3版本冲突问题
python·django·sqlite
GIS 数据栈2 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis
爱分享的码瑞哥2 小时前
Python爬虫中的IP封禁问题及其解决方案
爬虫·python·tcp/ip
statistican_ABin2 小时前
R语言数据分析案例45-全国汽车销售数据分析(可视化与回归分析)
数据挖掘·数据分析
傻啦嘿哟3 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
B站计算机毕业设计超人3 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
IT古董3 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习