• Numpy、Pandas、Matplotlib学习(更新ing...)


    数据科学:Matplotlib、Seaborn笔记

    数据科学:Scipy、Scikit-Learn笔记

    一、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)
    
    • 1

    函数调用时至少要指定参数start、end、periods中的两个。

    参数数据类型意义
    startstr or datetime-like, optional生成日期的左侧边界
    endstr or datetime-like, optional生成日期的右侧边界
    periodsinteger, optional生成周期
    freqstr or DateOffset, default ‘D’常见取值见下表
    tzstr or tzinfo, optional返回本地化的DatetimeIndex的时区名,例如’Asia/Hong_Kong’
    normalizebool, default False生成日期之前,将开始/结束时间初始化为午夜
    namestr, 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。
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5.判断重复值duplicated()和删除重复值drop_duplicates()

    drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
    
    • 1

    参数解析

    • subset:列名或列名序列,对某些列来识别重复项,默认情况下使用所有列。

    • keep:可选值有first,last,False,默认为first,确定要保留哪些重复项。

       first:删除除第一次出现的重复项,即保留第一次出现的重复项。
       last:保留最后一次出现的重复项。
       False:删除所有重复项。
      
      • 1
      • 2
      • 3
    • 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)
    
    • 1

    参数说明

    • 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)
    
    • 1

    7.DataFrame.prod()

    返回值在请求的轴上的乘积

    DataFrame.prod(axis=None, skipna=True, level=None, numeric_only=None, min_count=0, **kwargs)
    
    • 1
    参数描述
    axis{索引(0),列(1)}要应用的函数的轴。
    skipna布尔值,默认为True计算结果时排除NA/NULL值。
    levelInt或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)
    
    • 1

    参数说明

    • 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() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • x和y:表示标签或者位置,用来指定显示的索引,默认为None

    • kind:表示绘图的类型,默认为line,折线图

       line:折线图
       bar/barh:柱状图(条形图),纵向/横向
       pie:饼状图
       hist:直方图(数值频率分布)
       box:箱型图
       kde:密度图,主要对柱状图添加Kernel 概率密度线
       area:区域图(面积图)
       scatter:散点图
       hexbin:蜂巢图
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 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)
    
    • 1
    • 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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 判断有空值的列
    df.isnull().any()
    # 显示出有空值列的列名的列表
    df.columns[iris.isnull().any()].tolist()  
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    常用参数

    • 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表示第一行数据而不是文件的第一行。
      
      • 1
    • 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='.')
    
    • 1
    • 2
    • 3
    • 4
    • 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)
    
    • 1
    • 2
    • 3

    常用参数解析

    • 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
      
      • 1
      • 2
    • 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)
    
    • 1
    • 2
    • 3
    • 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位小数
      
      • 1
    • engine=None:保存格式。

    ExcelWriter()

    有时一个excel内会有多个sheet。但是将两组数据通过to_excel函数先后保存到一个excel内会发现只有后一组保存的数据,因为前一组的数据被后写入的数据覆盖了。

    df1.to_excel('xxx.xlsx',sheet_name='df1')
    df2.to_excel('xxx.xlsx',sheet_name='df2')
    
    • 1
    • 2

    使用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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样会覆盖我们原有的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)
    
    • 1
    • 2
    • 3
    • 4
    # 一次写入多个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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    14.describe()

    DataFrame.describe(percentiles=None, include=None, exclude=None)
    
    • 1
    • 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)
    
    • 1
    参数作用
    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)
    
    • 1
    • 2
    • 3

    参数说明

    • 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
    • 1

    示例

    # 选出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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    参考链接

    pd.set_option()参数详解
    Python的reshape的用法:reshape(1,-1)、reshape(-1,1)
    https://github.com/datawhalechina/joyful-pandas
    https://github.com/datawhalechina/powerful-numpy

  • 相关阅读:
    ROS机械臂 Movelt 学习笔记4 | Move Group 接口 Python
    Qt Quick/QML入门到精通_专栏demo对应文章目录(目前27个demo/长期更新)
    SOFAJRaft 日志复制共识算法
    力扣-404.左叶子之和
    大数据学长面试京东面试题
    秋招/考研复试-数据结构
    动态规划算法(1)
    GO语言:文件操作之写入文件及iota生成常量
    PCL 点云转深度图像
    Android平台GB28181设备接入端对接编码前后音视频源类型浅析
  • 原文地址:https://blog.csdn.net/qq_45832050/article/details/127466841