数据科学:Numpy、Pandas、Matplotlib、Seaborn、Scipy、Scikit-Learn
- 一、Numpy
- 二、Pandas
- 参考链接
一、Numpy
numpy.ndarray:n维数组
在numpy中以np.nan
表示缺失值,它是一个浮点数。
参考:NumPy中文网
二、Pandas
1.数据结构:Series、DataFrame
区别
- series,只是一个一维数据结构,它由index和value组成。
- dataframe,是一个二维结构,除了拥有index和value之外,还拥有column。
联系
- dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。
2.date_range()函数
主要用于生成一个固定频率的时间索引
date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, inclusive=None, **kwargs)
函数调用时至少要指定参数start、end、periods中的两个。
参数 | 数据类型 | 意义 |
---|---|---|
start | str or datetime-like, optional | 生成日期的左侧边界 |
end | str or datetime-like, optional | 生成日期的右侧边界 |
periods | integer, optional | 生成周期 |
freq | str or DateOffset, default ‘D’ | 常见取值见下表 |
tz | str or tzinfo, optional | 返回本地化的DatetimeIndex的时区名,例如’Asia/Hong_Kong’ |
normalize | bool, default False | 生成日期之前,将开始/结束时间初始化为午夜 |
name | str, default None | 产生的DatetimeIndex的名字 |
closed | {None, ‘left’, ‘right’}, optional | 使区间相对于给定频率左闭合、右闭合、双向闭合(默认的None) |
freq 常见取值 | 说明 |
---|---|
M | 月 |
B | 工作日 |
W | 星期天 |
D | 天 |
H | 小时 |
T | 分钟 |
S | 秒 |
L | 毫秒 |
3.loc和iloc
loc表示location的意思;iloc中的loc意思相同,前面的i表示integer,所以它只接受整数作为参数。
iloc和loc区别联系
索引方式:
- iloc使用基于零的整数位置进行索引,通过行和列的整数位置来选择数据。
- loc使用标签进行索引,通过行和列的标签来选择数据。
索引对象类型:
- iloc使用整数位置作为索引,可以接受整数、整数切片或整数列表作为参数。
- loc使用标签作为索引,可以接受标签、标签切片或标签列表作为参数。
切片方式:
- iloc使用Python的切片语法,即左闭右开,例如[start:end]。
- loc使用Pandas的切片语法,即左闭右闭,例如[start:end]。
索引类型:
- iloc使用整数索引,无论数据框的索引类型是整数索引还是标签索引。
- loc使用标签索引,无论数据框的索引类型是整数索引还是标签索引。
参数省略:
- iloc可以省略行参数或列参数中的一个来选择所有行或所有列。
- loc可以省略行参数或列参数中的一个来选择所有行或所有列。
引用方式:
- iloc在选择数据时使用的是复制引用的方式,即返回的是数据的副本。
- loc在选择数据时使用的是原地引用的方式,即返回的是数据的视图。
4.dropna() 删除缺失值
df.dropna(
axis=0, #删除维度,0为行,1为列。默认为0。
how='any', #删除的判断条件。'any'代表这一行只要有一个空值就删除。'all'表示,这一行都是空值才删除。
thresh=None, # 例如,thresh=N,即,只要空值大于等于N的都删除,只保留空值小于N的行和列。
subset=None, # list,对特定的列的缺失值处理。
inplace=False # 布尔值,是否修改原数据。默认为False。
)
5.判断重复值duplicated()和删除重复值drop_duplicates()
drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
参数解析:
-
subset:列名或列名序列,对某些列来识别重复项,默认情况下使用所有列。
-
keep:可选值有first,last,False,默认为first,确定要保留哪些重复项。
first:删除除第一次出现的重复项,即保留第一次出现的重复项。 last:保留最后一次出现的重复项。 False:删除所有重复项。
-
inplace:布尔值,默认为False,返回副本。如果为True,则直接在原始的Dataframe上进行删除。
-
ignore_index:布尔值,默认为False,如果为True,则生成的行索引将被标记为0、1、2、…、n-1。
6.sort_values()和sort_index()
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
参数说明:
- by:按照哪些列的数值进行排序。可以是一个字符串,也可以是一个由多个列名组成的列表或数组。
- axis:排序轴,0表示行(默认),1表示列。
- ascending:排序方式,True表示升序(默认),False表示降序。
- inplace:是否对原DataFrame对象进行修改。True表示修改原对象,False表示返回一个新的对象。
- kind:排序算法,可以是"quicksort"(默认)、“mergesort"或"heapsort”。
- na_position:缺失值的排列顺序,可以是"last"(默认)或"first"。
- ignore_index:是否重新生成索引,True表示生成新的连续索引,False表示保留原来的索引。
- key:排序时使用的函数,可以是一个函数、函数名或由多个函数组成的列表。
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False)
7.DataFrame.prod()
返回值在请求的轴上的乘积
DataFrame.prod(axis=None, skipna=True, level=None, numeric_only=None, min_count=0, **kwargs)
参数 | 值 | 描述 |
---|---|---|
axis | {索引(0),列(1)} | 要应用的函数的轴。 |
skipna | 布尔值,默认为True | 计算结果时排除NA/NULL值。 |
level | Int或Level名称,默认为无 | 如果轴是多索引(分层),则沿特定级别计数,折叠为系列。 |
numeric_only | 布尔,默认为无 | 包括浮点型、整型、布尔型列。如果没有,将尝试使用所有内容,然后仅使用数字数据。 |
min_count | 整型,默认为0 | 执行操作所需的有效值数。如果少于 min_count 如果存在非NA值,则结果将为NA。 |
8.resample()
重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。
Pandas中的resample方法用于对时间序列数据进行重采样,可以将数据从一个时间频率转换为另一个时间频率。
df.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0)
参数说明:
- rule:重采样的规则,例如"5min"表示5分钟,"D"表示天。具体规则可以参考Pandas官方文档。
- how:对采样到的数据执行聚合操作的函数名或函数对象。例如"sum"、“mean”、"median"等。默认为None,表示不进行聚合操作。
- axis:指定重采样的轴,0表示行轴,1表示列轴。默认为0。
- fill_method:填充缺失值的方法,例如"ffill"、"bfill"等。默认为None,表示不填充缺失值。
- closed:在重采样过程中,区间闭合的位置,例如"left"、"right"等。默认为None,表示使用默认值。
- label:在重采样过程中,区间闭合位置的标签,例如"left"、"right"等。默认为None,表示使用默认值。
- convention:在重采样过程中,指定重采样区间的位置是左边界还是右边界。默认为"start",表示使用左边界。
- kind:在重采样过程中,指定返回的对象类型,例如"period"、"timestamp"等。默认为None,表示使用默认类型。
- loffset:在重采样过程中,为重采样的时间序列添加偏移量。
- limit:在重采样过程中,限制填充缺失值的连续次数。
- base:在重采样过程中,指定重采样区间的基准点。
import pandas as pd
import numpy as np
# 创建一个时间序列数据
rng = pd.date_range('1/1/2021', periods=100, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
# 将数据按月份进行重采样,并计算每个月的平均值
ts.resample('M').mean()
9.DataFrame.plot( )
使用pandas.DataFrame的plot方法绘制图像会按照数据的每一列绘制一条曲线,默认按照列columns的名称在适当的位置展示图例,比matplotlib绘制节省时间,且DataFrame格式的数据更规范,方便向量化及计算。
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None, figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
fontsize=None, colormap=None, position=0.5, table=False, yerr=None,
xerr=None, stacked=True/False, sort_columns=False,
secondary_y=False, mark_right=True, **kwds)
-
x和y:表示标签或者位置,用来指定显示的索引,默认为None
-
kind:表示绘图的类型,默认为line,折线图
line:折线图 bar/barh:柱状图(条形图),纵向/横向 pie:饼状图 hist:直方图(数值频率分布) box:箱型图 kde:密度图,主要对柱状图添加Kernel 概率密度线 area:区域图(面积图) scatter:散点图 hexbin:蜂巢图
-
ax:子图,可以理解成第二坐标轴,默认None
-
subplots:是否对列分别作子图,默认False
-
sharex:共享x轴刻度、标签。如果ax为None,则默认为True,如果传入ax,则默认为False
-
sharey:共享y轴刻度、标签
-
layout:子图的行列布局,(rows, columns)
-
figsize:图形尺寸大小,(width, height)
-
use_index:用索引做x轴,默认True
-
title:图形的标题
-
grid:图形是否有网格,默认None
-
legend:子图的图例
-
style:对每列折线图设置线的类型,list or dict
-
xticks:设置x轴刻度值,序列形式(比如列表)
-
yticks
-
xlim:设置坐标轴的范围。数值,列表或元组(区间范围)
-
ylim
-
rot:轴标签(轴刻度)的显示旋转度数,默认None
-
fontsize : int, default None#设置轴刻度的字体大小
-
colormap:设置图的区域颜色
-
colorbar:柱子颜色
-
position:柱形图的对齐方式,取值范围[0,1],默认0.5(中间对齐)
-
table:图下添加表,默认False。若为True,则使用DataFrame中的数据绘制表格
-
yerr:误差线
-
xerr
-
stacked:是否堆积,在折线图和柱状图中默认为False,在区域图中默认为True
-
sort_columns:对列名称进行排序,默认为False
-
secondary_y:设置第二个y轴(右辅助y轴),默认为False
-
mark_right : 当使用secondary_y轴时,在图例中自动用“(right)”标记列标签 ,默认True
-
x_compat:适配x轴刻度显示,默认为False。设置True可优化时间刻度的显示
10.cumsum()
cumsum函数是pandas的累加函数,用来求列的累加值。
DataFrame.cumsum(axis=None, skipna=True, args, kwargs)
- axis:{索引(0),列(1)}
- skipna:排除NA /空值。如果整个行/列均为NA,则结果为NA
11.isna()和isnull()
# 分别统计每一列的缺失值比例和每一行的缺失值比例
df.isna().mean() # 默认mean的axis参数为0,按照行方向计算列的均值。
df.isna().mean(axis=1)
# 如果想要统计每列包含的缺失值个数,只需把mean替换为sum即可。
# 如果想知道缺失的行或列具体实哪一些,可以如下操作:
df[df.isna().sum(1) >= 2]
# 判断有空值的列
df.isnull().any()
# 显示出有空值列的列名的列表
df.columns[iris.isnull().any()].tolist()
12.idxmax()和idxmin()
返回一列最大值所在行的行索引df.idxmax()
,默认参数为0;若参数设置为1,则为一行最大值所在列的列索引df.idxmax(1)
。(取最小值为df.idxmin()
)
13.io读取与存储
read_csv()
pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None,
index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None,
engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False,
skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False,
skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False,
date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer',
thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None,
comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True,
warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False,
as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None,
memory_map=False, float_precision=None
常用参数:
-
filepath_or_buffer:字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。
-
sep : str, default ‘,’。指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’。
-
delimiter : str, default None。定界符,备选分隔符(如果指定该参数,则sep参数失效)
-
delim_whitespace : boolean, default False. 指定空格是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。在版本0.18.1支持
-
header : int or list of ints, default ‘infer’。指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
-
names : array-like, default None。用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。
-
index_col : int or sequence or False, default None。用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。如果文件不规则,行尾有分隔符,则可以设定index_col=False 保证pandas用第一列作为行索引。
-
usecols : array-like, default None。返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是[0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
-
squeeze : boolean, default False。如果文件值包含一列,则返回一个Series。
-
prefix : str, default None。在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, …
-
mangle_dupe_cols : boolean, default True。重复的列,将‘X’…’X’表示为‘X.0’…’X.N’。如果设定为false则会将所有重名列覆盖。
-
dtype : Type name or dict of column -> type, default None 每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
-
engine : {‘c’, ‘python’}, optional。使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
-
converters : dict, default None。列转换函数的字典。key可以是列名或者列的序号。
-
skipinitialspace : boolean, default False。忽略分隔符后的空白(默认为False,即不忽略).
-
skiprows : list-like or integer, default None。需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
-
skipfooter : int, default 0。从文件尾部开始忽略。 (c引擎不支持)
-
nrows : int, default None。需要读取的行数(从文件头开始算起)。
-
na_values : scalar, str, list-like, or dict, default None。一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
-
keep_default_na : bool, default True。如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。
-
na_filter : boolean, default True。是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。
-
verbose : boolean, default False。是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
-
skip_blank_lines : boolean, default True。如果为True,则跳过空行;否则记为NaN。
-
date_parser : function, default None。用于解析日期的函数,默认使用dateutil.parser.parser来做转换。
-
iterator : boolean, default False。返回一个TextFileReader 对象,以便逐块处理文件。
-
chunksize : int, default None。文件块的大小, See IO Tools docs for more
informationon iterator and chunksize. -
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’。直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。版本0.18.1版本支持zip和xz解压
-
thousands : str, default None。千分位分割符,如“,”或者“.”
-
decimal : str, default ‘.’。字符中的小数点 (例如:欧洲数据使用’,‘).
-
lineterminator : str (length 1), default None。行分割符,只在C解析器下使用。
-
encoding : str, default None。指定字符集类型,通常指定为’utf-8’. List of Python
standard encodings。
to_csv()
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None,
header=True, index=True, index_label=None, mode='w', encoding=None, compression=None,
quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None,
date_format=None, doublequote=True, escapechar=None, decimal='.')
- path_or_buf:字符串或文件句柄,默认无文件。路径或对象,如果没有提供,结果将返回为字符串。
- sep : character, default ‘,’ Field delimiter for the output file. 默认字符 ‘ ,’ 输出文件的字段分隔符。
- columns : sequence, optional Columns to write。可选列写入
- header : boolean or list of string, default True:字符串或布尔列表,默认为true。写出列名。如果给定字符串列表,则假定为列名的别名。
- index : boolean, default True:布尔值,默认为Ture。写入行名称(索引)
- index_label : string or sequence, or False, default None:字符串或序列,或False,默认为None。如果需要,可以使用索引列的列标签。如果没有给出,且标题和索引为True,则使用索引名称。如果数据文件使用多索引,则应该使用这个序列。如果值为False,不打印索引字段。
- mode : str:模式:值为‘str’,字符串。Python写模式,默认“w”
- encoding : string, optional:编码:字符串,可选。表示在输出文件中使用的编码的字符串,Python 2上默认为“ASCII”和Python 3上默认为“UTF-8”。
- compression : string, optional:字符串,可选项。表示在输出文件中使用的压缩的字符串,允许值为“gzip”、“bz2”、“xz”,仅在第一个参数是文件名时使用。
- date_format : string, default None:字符串,默认为None。字符串对象转换为日期时间对象。
read_excel()
read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None,names=None,
parse_cols=None, parse_dates=False,date_parser=None,na_values=None,thousands=None, convert_float=True,
has_index_names=None, converters=None,dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)
常用参数解析:
-
io : string, path object ; excel 路径。
-
sheetname : string, int, mixed list of strings/ints, or None, default 0
返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
-
header : int, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None
-
skiprows : list-like,Rows to skip at the beginning,省略指定行数的数据。
-
skip_footer : int,default 0, 省略从尾部数的int行数据。
-
index_col : int, list of ints, default None指定列为索引列,也可以使用u”strings”
-
names : array-like, default None, 指定列的名字。
-
usecols:指定要读取的列范围,可以是列名称、列索引或一个包含列名称/索引的列表。
to_excel()
to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None,
columns=None, header=True, index=True, index_label=None,startrow=0, startcol=0,
engine=None, merge_cells=True, encoding=None,inf_rep='inf', verbose=True, freeze_panes=None)
-
excel_writer:指定要写入的 Excel 文件的路径或文件对象。
-
sheet_name:指定要写入的工作表名称。
-
index:指定是否写入行索引,默认为 True。
-
header:指定是否写入表头,默认为 True。
-
startrow:指定写入数据的起始行号。
-
startcol:指定写入数据的起始列号。
-
na_rep:指定缺失值的表示方式。
-
columns=None:指定输出某些列 列 = [“名称”, “数字”]
-
encoding=None:指定编码,常用 utf-8
-
float_format=None:浮点数保存的格式,默认保存为字符串
float_format=’%.2f’ # 保存为浮点数,保留2位小数
-
engine=None:保存格式。
ExcelWriter()
有时一个excel内会有多个sheet。但是将两组数据通过to_excel函数先后保存到一个excel内会发现只有后一组保存的数据,因为前一组的数据被后写入的数据覆盖了。
df1.to_excel('xxx.xlsx',sheet_name='df1')
df2.to_excel('xxx.xlsx',sheet_name='df2')
使用pd.ExcelWriter建立一个writer,然后,将df1,df2都使用to_excel(writer, sheet名),最后一次性将这些数据保存,并关闭writer就完成了。
writer = pd.ExcelWriter('xxx.xlsx')
df1.to_excel(writer,sheet_name="df1")
df2.to_excel(writer,sheet_name="df2")
writer.save()
writer.close()
这样会覆盖我们原有的excel数据,如果不想覆盖,可以:
writer = pd.ExcelWriter('保存.xlsx') # 如果不存在,会自动创建excel
df = pd.read_excel("xxx.xlsx", sheet_name=xxx)
......
df_res.to_excel(writer, sheet_name=xxx, index=False)
# 一次写入多个sheet
with pd.ExcelWriter('writer.xlsx') as writer:
data.to_excel(writer,sheet_name='a')
data.to_excel(writer,sheet_name='b')
data.to_excel(writer,sheet_name='c')
# 追加新sheet
with pd.ExcelWriter('writer.xlsx',mode='a',engine='openpyxl') as writer:
data2.to_excel(writer,sheet_name='d')
# 测试excel追加数据至sheet
with pd.ExcelWriter('writer.xlsx',mode='a',engine='openpyxl') as writer:
data.to_excel(writer,sheet_name='d')
14.describe()
DataFrame.describe(percentiles=None, include=None, exclude=None)
- percentiles:设置输出的百分位数,默认为[.25,.50,.75],返回第25,50,75百分位数。
- include:包含哪类数据。默认只包含连续值,不包含离散值;include = ‘all’ 设置全部类型。
- exclude:描述 DataFrame 时要排除的数据类型列表。默认为无
对于对象类型数据(例如字符串或时间戳),则结果的指数将包括count,unique, top,和freq。top标识最常见的值。freq标识最常见的值的出现频次。时间戳还包括first和last指标。如果多个对象值具有最高计数,那么将从具有最高计数的那些中任意选择count和top结果。
15.数据合并concat、merge和join
concat()
可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并。
pandas.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False, keys=None, levels=None, verify_integrity=False, sort=None, copy=True)
参数 | 作用 |
---|---|
axis | 默认为0,0为行拼接,1为列拼接,意为沿着连接的轴。 |
join | {‘inner’,‘outer’},默认为“outer”。如何处理其他轴上的索引。outer为并集和inner为交集。 |
ignore_index | 接收布尔值,默认为False。如果设置为True,则表示清除现有索引并重置索引值 |
keys | 接收序列,表示添加最外层索引 |
levels | 用于构建MultiIndex的特定级别(唯一值) |
names | 设置了keys和level参数后,用于创建分层级别的名称 |
verify_integerity | 检查新的连接轴是否包含重复项。接收布尔值,当设置为True时,如果有重复的轴将会抛出错误,默认为False |
merge
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
参数说明:
- left:参与合并的左侧DataFrame
- right:参与合并的右侧DataFrame
- how:{inner、outer、left、right}default为inner为交集。
- on:用于连接的列名。该列名就像连接的两张表中共同的特征。类似按键合并多表。如果未制定,且其他连接键也没用制定,则以left和right列名的交集为连接键,也就是inner连接。
- left_on:左侧DataFrame中用作连接键的列
- right_on:右则DataFrame中用作连接键的列
- left_index:使用左则DataFrame中的行索引做为连接键
- right_index:使用右则DataFrame中的行索引做为连接键
- sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
- suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(‘_x’,‘_y’)。如果两个DataFrame对象都有“Data”,则结果中就会出现“Data_x”和"Data_y“
join()
能够通过索引或指定列来连接多个DataFrame对象
join(other,on = None,how =‘left’,lsuffix =‘’,rsuffix =‘’,sort = False )
示例
# 选出col0在30到80之间的行中col3与col1之差为奇数的行,
# 或者col2大于50中的行col3超过col1均值的行
c11 = df["col 0"].between(30, 80)
c12 = (df["col 3"] - df["col 1"]) % 2 ==1
c21 = df["col 2"] > 50
c22 = df["col 3"] > df["col 1"].mean()
df.loc[(c11 & c12) | (c21 & c22)]
# dataframe保留两位小数
df = df.round(2)
# 写入WPD
def WriteTXT(data: pd.DataFrame, savepath: str):
with open(savepath, "w", 65536, 'utf-8') as file:
h1 = "// matfile"
file.write(h1.strip() + "\n")
for key, items in data.iterrows():
items_l = list(items)
line = str()
for i in range(len(items_l)):
if i == 0:
line += items_l[i]
line += ' '
elif i == 1:
line += str(items_l[i])
line += ' '
elif i == 2:
line += items_l[i]
line += ' '
elif i == len(items_l) - 1:
line += str("%.6f" % items_l[i])
else:
line += str("%.6f" % items_l[i])
line += ' '
file.write(line.strip() + "\n")
file.write(h1.strip() + "\n")
16.groupby
groupby 函数是 Pandas 库中 DataFrame 和 Series 对象的一个方法,它允许你对这些对象中的数据进行分组和聚合。
对于 DataFrame 对象,groupby 函数的语法如下:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True,
sort=True, group_keys=True, squeeze=False,
observed=False, dropna=True)
其中,各个参数的含义如下:
- by:用于分组的列名或函数。可以是一个列名、一个函数、一个列表或一个字典。按多个字段分组时传入列表。
- axis:分组轴。如果axis=0(默认值),则沿着行方向分组;如果 axis=1,则沿着列方向分组。
- level:当DataFrame的索引为多重索引时,level参数指定用于分组的索引,可以传入多重索引中索引的下标(0,1…)或索引名,多个用列表传入。
- as_index:分组结果默认将分组列的值作为索引,如果按单列分组,结果默认是单索引,如果按多列分组,结果默认是多重索引。是否将分组键作为索引返回。如果as_index=True(默认值),则返回一个带有分组键作为索引的对象;否则返回一个不带索引的对象。
- sort:是否对分组键进行排序。如果 sort=True(默认值),则对分组键进行排序;否则不排序。
- group_keys:是否在结果中包含分组键。如果 group_keys=True(默认值),则在结果中包含分组键;否则不包含。
- dropna:是否删除包含缺失值的行。如果dropna=True(默认值),则删除包含缺失值的行;否则保留。
groupby()分组得到的是一个DataFrameGroupBy对象,直接打印DataFrameGroupBy对象只能看到它的内存地址,看不到内部的结构。
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000007C4E22D3498>
DataFrameGroupBy是一个可迭代对象,可以转换成list打印,也可以直接遍历打印出来。遍历出来的是一个个元组,每个元组对应一个分组,元组的第一个元素与分组列里的值对应,元组的第二个元素是分到当前小组的数据,是一个DataFrame。
DataFrameGroupBy对象的内部结构为:[(分组名1, 子DataFrame1), (分组名2, 子DataFrame2), …],相当于groupby()将DataFrame按字段值分成了多个小的DataFrame,然后将字段值和小的DataFrame用元组的方式保存在DataFrameGroupBy对象中。
分组对象的groups属性可以返回分组信息,结果是一个形似字典的对象,由分组名和此分组数据在原DataFrame中的行索引组成。
借用groups可以提取出所有分组的分组名,分组对象的get_group()方法可以返回指定分组名的子DataFrame。
aggregate、apply、transform
DataFrame.agg
DataFrame.agg(func=None, axis=0, *args, **kwargs)
;针对特定的轴进行一个或者多个聚合操作。
- func:函数,可以为str, list或者dict类型。可接受的组合包括:函数,字符串形式的函数名,函数或函数名列表(如[np.sum, ‘mean’]),轴标签字典->函数,函数名或此类的列表。
count() – Number of non-null observations
sum() – Sum of values
mean() – Mean of values
median() – Arithmetic median of values
min() – Minimum
max() – Maximum
mode() – Mode
std() – Standard deviation
var() – Variance
- axis:0 or ‘index’, 1 or ‘columns’,默认为0。如果0或’index’,对每一列应用函数;如果1或’columns’,应用函数到每一行。
DataFrame.apply
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
;沿着dataframe的轴进行操作。
- func:同agg
- axis:同agg
- raw:布尔型,默认为False。确定是否将行或列作为Series或ndarray对象传递。如果设置为False,将每一行或每一列作为series传递给函数;如果设置为True,传递的函数将接收ndarray对象。如果只是应用NumPy缩减函数,可以设置为Ture,会获得更好的性能.
DataFrame.transform
DataFrame.transform(func, axis=0, *args, **kwargs)
;调用func函数生成带有转换值的DataFrame,生成的DataFrame将具有与self相同的轴长。
参考链接
pd.set_option()参数详解
Python的reshape的用法:reshape(1,-1)、reshape(-1,1)
https://github.com/datawhalechina/joyful-pandas
https://github.com/datawhalechina/powerful-numpy