精华内容
下载资源
问答
  • python---pandas详解

    千次阅读 2020-03-08 23:50:49
    python—pandas详解 文章目录python---pandas详解pandas介绍pandas的数据结构介绍SeriesDataFrame索引对象基本功能重新索引丢弃指定轴上的项索引、选取和过滤⽤loc和iloc进⾏选取算术运算和数据对齐DataFrame和...

    python—pandas详解


    pandas介绍

    pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
    pandas经常和其它⼯具⼀同使⽤,如数值计算⼯具NumPy和SciPy,分析库statsmodels和scikitlearn和数据可视化库matplotlib

    pandas的数据结构介绍

    pandas两大主要数据结构:Series和DateFrame

    Series

    Series是⼀种类似于⼀维数组的对象,它由⼀组数据(各种NumPy数据类型)以及⼀组与之相关的数据标签(即索引)组成。仅由⼀组数据即可产⽣最简单的Series:
    例如:
    在这里插入图片描述
    Series的字符串表现形式为:索引在左边,值在右边,如果未指定索引,就会自动生成。也可以自己指定索引:
    例如:
    在这里插入图片描述
    当创建好pandas数组后,可以通过values和index属性获取数组的值和索引。
    例如:
    在这里插入图片描述
    与numpy数组不同的是,pandas数组可以通过索引的方式选取Series中的单个或一组值:
    例如:
    在这里插入图片描述
    当对pandas数组进行一些数学运算或者逻辑运算时,它返回的都是带索引的。
    例如:
    在这里插入图片描述
    另外,你可以通过python字典来创建一个Series
    例如:
    在这里插入图片描述另外:Series对象本身及其索引都有⼀个name属性
    例如:
    在这里插入图片描述

    DataFrame

    DataFrame是⼀个表格型的数据结构,它含有⼀组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有⾏索引也有列索引,它可以被看做由Series组成的字典(共⽤同⼀个索引)。

    建DataFrame的办法有很多,最常⽤的⼀种是直接传⼊⼀个由等⻓列表或NumPy数组组成的字典:
    在这里插入图片描述
    如果指定了了列序列,则DataFrame的列就会按照指定顺序进行排序:
    例如上面的例子, 这里指定第一列为’year’,第二列为‘state’,第三列为’pop’.
    在这里插入图片描述
    另外,还可以通过嵌套字典的方式创建DataFrame,如果嵌套字典传给DataFrame,pandas就会被解释为:外层字典的键作为列,内层键则作为⾏索引:
    例如:
    在这里插入图片描述

    对于特别大的DataFrame,head方法会选取前五行:
    例如:
    在这里插入图片描述
    如果传入的列在数据中找不到,就会在结果中产生缺失值:
    在这里插入图片描述
    通过类似字典标记的⽅式或属性的⽅式,可以将DataFrame的列获取为⼀个Series:
    例如:
    在这里插入图片描述
    列可以通过赋值的⽅式进⾏修改。
    例如:
    在这里插入图片描述
    将列表或数组赋值给某个列时,其⻓度必须跟DataFrame的⻓度相匹配。如果赋值的是⼀个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值:
    例如,这里把原本aaa列都是NaN类型的数据,通过Series数组改变了相应的索引数据:在这里插入图片描述
    DataFrame的del⽅法可以⽤来删除相应的列:
    例如,这里通过del方法把pop列删除了:
    在这里插入图片描述
    另外,可以通过Numpy的数组方法, 对DataFrame进行转置(arr.T):

    在这里插入图片描述
    关于DataFrame构造器

    类型说明
    二维ndarray数据矩阵,还可以传入行标和列标
    由数组、列表或元组组成的字典每个序列会变成DataFrame的一列。所有序列的长度必须相同
    NumPy的结构化/记录数组类似于“由数组组成的字典”
    由Series组成的字典每个Series会成为一列。如果没有显式指定索引,则各Series的索引会被合并成结果的行索引
    由字典组成的字典各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样
    字典或Series的列表各项将会成为DataFrame的一行。字典键或Series素引的并集将会成为DataFrame的列标
    由列表或元组组成的列表类似于“二维ndarray”
    另一个DataFrame该DataFrame的索引将会被沿用,除非显式指定了其他索引
    NumPy的MaskedArray类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值

    索引对象

    构建Series或DataFrame时,所
    ⽤到的任何数组或其他序列的标签都会被转换成⼀个Index,而且index对象不可变,用户不能对它修改
    (会抛出typeError的异常):
    在这里插入图片描述

    基本功能

    重新索引

    pandas对象的⼀个重要⽅法是reindex,其作⽤是创建⼀个新对象,它的数据符合新的索引。
    例如:
    在这里插入图片描述

    丢弃指定轴上的项

    使用drop方法可以返回一个指定轴上删除了指定值的新对象:
    例如(对于Series):
    在这里插入图片描述
    对于DataFrame,可以删除任意轴上的索引值。通过传递参数axis可以删除列的值:

    例如:frame是什么都没有删除的,frame1删除了第0行,frame2通过axis=1指定了列,删除了state列
    在这里插入图片描述

    索引、选取和过滤

    Series索引(obj[…])的⼯作⽅式类似于NumPy数组的索引,只不过Series的索引值不只是整数。

    对于未指定索引的数组,会用默认的数字(0~N-1)索引, 例:
    在这里插入图片描述

    通过index属性指定索引:
    在这里插入图片描述
    切片操作:
    这里演示了先用数字索引,再用标签索引
    在这里插入图片描述

    ⽤loc和iloc进⾏选取

    特殊的标签运算符loc和iloc。它们可以让你⽤类似NumPy的标记,使⽤轴标签(loc)或整数索引(iloc),从DataFrame选择⾏和列的⼦集。
    例如(使用loc):
    在这里插入图片描述
    使用iloc(整数索引)
    在这里插入图片描述

    算术运算和数据对齐

    pandas最重要的⼀个功能是,它可以对不同索引的对象进⾏算术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集例如:
    在这里插入图片描述
    对于DataFrame,对齐操作会同时发生在行和列上:
    在这里插入图片描述

    DataFrame和Series之间的运算

    跟不同维度的NumPy数组⼀样,DataFrame和Series之间算术运算也是有明确规定的,
    例如,当我们frame减去series时,对应frame每一行都会执行这个操作:(其实这叫做广播)
    在这里插入图片描述
    默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着⾏⼀直向下⼴播。

    函数应⽤和映射

    NumPy的ufuncs(元素级数组⽅法)也可⽤于操作pandas对象:
    例如:
    在这里插入图片描述
    另⼀个常⻅的操作是,将函数应⽤到由各列或⾏所形成的⼀维数组上。DataFrame的apply⽅法即可实现此功能:
    在这里插入图片描述
    或者使用applymap进行每个元素操作:
    这里对每一个元素加一
    在这里插入图片描述

    排序和排名

    根据条件对数据集排序(sorting)也是⼀种重要的内置运算。要对⾏或列索引进⾏排序(按字典顺序),可使⽤sort_index⽅法,它将返回⼀个已排序的新对象。

    对于Series数组:
    在这里插入图片描述
    对于DataFrame,则可以根据任意一个轴上的索引进行排序:
    在这里插入图片描述
    通过ascending属性可以使其降序:
    在这里插入图片描述

    带有重复标签的轴索引

    如果有重复的索引,那么索引的is_unique属性可以告诉你它的值是否是唯⼀的
    在这里插入图片描述
    在这里插入图片描述

    汇总和计算描述统计

    pandas对象拥有⼀组常⽤的数学和统计⽅法。它们⼤部分都属于约简和汇总统计,⽤于从Series中提取单个值(如sum或mean)或从DataFrame的⾏或列中提取⼀个Series。跟对应的NumPy数组⽅法相⽐,它们都是基于没有缺失数据的假设⽽构建的。

    例如(sum方法):
    在这里插入图片描述
    mean方法:
    在这里插入图片描述
    idxmin获取最大值的索引(idxmin获取最小值索引):
    在这里插入图片描述

    方法说明
    count非NA值的数量
    describe针对Series或各DataFrame列计算汇总统计
    min、max计算最小值和最大值
    argmin、argmax计算能够获取到最小值和最大值的索引位置(整数)
    idxmin、idxmax计算能够获取到最小值和最大值的索引值
    quantile计算样本的分位数(0到1)
    sum值的总和
    mean值的平均数
    median值的算术中位数(50%分位数)
    mad根据平均值计算平均绝对离差
    var样本值的方差
    std样本值的标准差
    skew样本值的偏度(三阶矩)
    kurt样本值的峰度(四阶矩)
    cumsum样本值的累计和
    cummin、cummax样本值的累计最大值和累计最小值
    cumprod样本值的累计积
    diff计算一阶差分(对时间序列很有用)
    pct_change计算百分数变化

    参考书籍:《利用python进行数据分析》

    展开全文
  • pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。Series 和 DataFrame 分别对应于一维的序列和二...
  • Pandas最初被作为金融数据分析工具而开发出来,因此 pandas 为时间序列分析提供了很好的支持。 Pandas 的名称来自于面板数据(panel data)和python数据分析 (data analysis) 。panel data是经济学中关于多维数据...
  • Pandas数据结构详解.pdf

    2020-07-16 15:33:22
    Pandas数据结构详解.pdf
  • 有一个用于数据科学的包绝对是必需的,它就是 pandaspandas 最有趣的地方在于里面隐藏了很多包。它是一个核心包,里面有很多其他包的功能。这点很棒,因为你只需要使用pandas就可以完成工作。 pandas 相当于 ...

    Python是开源的,它很棒,但是也无法避免开源的一些固有问题:很多包都在做(或者在尝试做)同样的事情。如果你是Python 新手,那么你很难知道某个特定任务的最佳包是哪个,你需要有经验的人告诉你。有一个用于数据科学的包绝对是必需的,它就是 pandas

    pandas 最有趣的地方在于里面隐藏了很多包。它是一个核心包,里面有很多其他包的功能。这点很棒,因为你只需要使用pandas就可以完成工作。

    pandas 相当于 pythonexcel:它使用表(也就是 dataframe),能在数据上做各种变换,但还有其他很多功能。

    如果你早已熟知python的使用,可以直接跳到第三段。

    小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴" 点击 " 即可领取

    现在让我们开始吧!

    pandas 最基本的功能

    读取数据

    data = pd.read_csv( my_file.csv )
    data = pd.read_csv( my_file.csv , sep= ; , encoding= latin-1 , nrows=1000, skiprows=[2,5])
    

    sep 代表的是分隔符。如果你在使用法语数据,excelcsv 分隔符是「;」,因此你需要显式地指定它。编码设置为latin-1来读取法语字符。nrows=1000 表示读取前 1000行数据。skiprows=[2,5] 表示你在读取文件的时候会移除第 2 行和第 5 行。

    (1),最常用的功能:read_csv, read_excel

    (2),其他一些很棒的功能:read_clipboard, read_sql

    写数据

    data.to_csv( my_new_file.csv , index=None)
    

    index=None 表示将会以数据本来的样子写入。如果没有写 index=None,你会多出一个第一列,内容是 1,2,3…,一直到最后一行。

    我通常不会去使用其他的函数,像.to_excel, .to_json,`` .to_pickle等等,因为.to_csv就能很好地完成工作,并且csv 是最常用的表格保存方式。

    检查数据

    在这里插入图片描述

    Gives (#rows, #columns)
    

    给出行数和列数。

    data.describe()
    

    计算基本的统计数据。

    查看数据

    data.head(3)
    

    打印出数据的前 3 行。与之类似,.tail() 对应的是数据的最后一行。

    data.loc[8]
    

    打印出第八行。

    data.loc[8,  column_1 ]
    

    打印第八行名为「column_1」的列。

    data.loc[range(4,6)]
    

    第四到第六行(左闭右开)的数据子集。

    pandas 的基本函数

    逻辑运算

    data[data[ column_1 ]== french ]
    data[(data[ column_1 ]== french ) & (data[ year_born ]==1990)]
    data[(data[ column_1 ]== french ) & (data[ year_born ]==1990) & ~(data[ city ]== London )]
    

    通过逻辑运算来取数据子集。要使用 & (AND)、 ~ (NOT) 和 | (OR),必须在
    逻辑运算前后加上“(”和“)”。

    data[data[ column_1 ].isin([ french ,  english ])]
    

    除了可以在同一列使用多个 OR,你还可以使用.isin() 函数。

    基本绘图

    matplotlib 包使得这项功能成为可能。正如我们在介绍中所说,它可以直接在 pandas 中使用。

    data[ column_numerical ].plot()
    

    在这里插入图片描述

    .plot() 输出的示例

    data[ column_numerical ].hist()
    

    画出数据分布(直方图)

    在这里插入图片描述

    .hist() 输出的示例

    %matplotlib inline
    

    如果你在使用 Jupyter,不要忘记在画图之前加上以上代码。

    更新数据

    data.loc[8,  column_1 ] =  english
    将第八行名为 column_1 的列替换为「english」
    
    data.loc[data[ column_1 ]== french ,  column_1 ] =  French
    

    在一行代码中改变多列的值。

    好了,现在你可以做一些在 excel 中可以轻松访问的事情了。下面让我们深入研究 excel 中无法实现的一些令人惊奇的操作吧。

    中级函数

    统计出现的次数

    data[ column_1 ].value_counts()
    

    在这里插入图片描述

    .value_counts() 函数输出示例

    在所有的行、列或者全数据上进行操作

    data[ column_1 ].map(len)
    

    len() 函数被应用在了「column_1」列中的每一个元素上

    .map() 运算给一列中的每一个元素应用一个函数

    data[ column_1 ].map(len).map(lambda x: x/100).plot()
    

    pandas 的一个很好的功能就是链式方法(https://tomaugspurger.github.io/method-chaining)。它可以帮助你在一行中更加简单、高效地执行多个操作(.map() 和.plot())。

    data.apply(sum)
    

    .apply() 会给一个列应用一个函数。

    .applymap() 会给表 (DataFrame) 中的所有单元应用一个函数。

    tqdm, 唯一的

    在处理大规模数据集时,pandas 会花费一些时间来进行.map()、.apply()、.applymap() 等操作。tqdm 是一个可以用来帮助预测这些操作的执行何时完成的包(是的,我说谎了,我之前说我们只会使用到 pandas)。

    from tqdm import tqdm_notebook
    tqdm_notebook().pandas()
    

    用 pandas 设置 tqdm

    data[ column_1 ].progress_map(lambda x: x.count( e ))
    

    用 .progress_map() 代替.map()、.apply() 和.applymap() 也是类似的。

    在这里插入图片描述

    在 Jupyter 中使用 tqdm 和 pandas 得到的进度条

    相关性和散射矩阵

    data.corr()
    data.corr().applymap(lambda x: int(x*100)/100)
    

    在这里插入图片描述

    .corr() 会给出相关性矩阵

    pd.plotting.scatter_matrix(data, figsize=(12,8))
    

    在这里插入图片描述

    散点矩阵的例子。它在同一幅图中画出了两列的所有组合。

    pandas 中的高级操作

    The SQL 关联

    在 pandas 中实现关联是非常非常简单的

    data.merge(other_data, on=[ column_1 ,  column_2 ,  column_3 ])
    

    关联三列只需要一行代码

    分组

    一开始并不是那么简单,你首先需要掌握语法,然后你会发现你一直在使用这个功能。

    data.groupby( column_1 )[ column_2 ].apply(sum).reset_index()
    

    按一个列分组,选择另一个列来执行一个函数。.reset_index() 会将数据重构成一个表。

    在这里插入图片描述

    正如前面解释过的,为了优化代码,在一行中将你的函数连接起来。

    行迭代

    dictionary = {}
    
    for i,row in data.iterrows():
     dictionary[row[ column_1 ]] = row[ column_2 ]
    

    .iterrows() 使用两个变量一起循环:行索引和行的数据 (上面的 i 和 row)。

    总而言之,pandas 是 python 成为出色的编程语言的原因之一。

    我本可以展示更多有趣的 pandas 功能,但是已经写出来的这些足以让人理解为何数据科学家离不开 pandas。总结一下,pandas 有以下优点:
    
    (1),用将所有复杂、抽象的计算都隐藏在背后了;
    (2),直观,;
    (3),快速,即使不是最快的也是非常快的。
    
    它有助于数据科学家快速读取和理解数据,提高其工作
    

    以上就是小编今天为大家带来的内容,小编本身就是一名python开发工程师,我自己花了三天时间整理了一套python学习教程,从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴" 点击 " 即可领取

    展开全文
  • Pandas详解二之DataFrame对象

    万次阅读 多人点赞 2018-03-15 19:38:46
    import pandas as pd from pandas import DataFrame import numpy as np DataFrame DataFrame是一个表格型的数据结构,既有行索引(保存在index)又有列索引(保存在columns)。 一、DataFrame对象常用...
    约定 
    
    import pandas as pd
    from pandas import DataFrame
    import numpy as np

    DataFrame

    DataFrame是一个表格型的数据结构,既有行索引(保存在index)又有列索引(保存在columns)

    一、DataFrame对象常用属性:

    • 创建DateFrame方法有很多(后面再介绍),最常用的是直接传入一个由等长列表或Numpy组成的字典:
    dict1={"Province":["Guangdong","Beijing","Qinghai","Fujiang"],
          "year":[2018]*4,
          "pop":[1.3,2.5,1.1,0.7]}
    df1=DataFrame(dict1)
    df1
    代码结果:
    Provincepopyear
    0Guangdong1.32018
    1Beijing2.52018
    2Qinghai1.12018
    3Fujiang0.72018
    • 同Series一样,也可在创建时指定序列(对于字典中缺失的用NaN):
    df2=DataFrame(dict1,columns=['year','Province','pop','debt'],index=['one','two','three','four'])
    df2
    代码结果:
    yearProvincepopdebt
    one2018Guangdong1.3NaN
    two2018Beijing2.5NaN
    three2018Qinghai1.1NaN
    four2018Fujiang0.7NaN
    • 同Series一样,DataFrame的index和columns有name属性
    df2
    代码结果:
    yearProvincepopdebt
    one2018Guangdong1.3NaN
    two2018Beijing2.5NaN
    three2018Qinghai1.1NaN
    four2018Fujiang0.7NaN
    df2.index.name='English'
    df2.columns.name='Province'
    df2
    代码结果:
    ProvinceyearProvincepopdebt
    English
    one2018Guangdong1.3NaN
    two2018Beijing2.5NaN
    three2018Qinghai1.1NaN
    four2018Fujiang0.7NaN
    • 通过shape属性获取DataFrame的行数和列数:
    df2.shape

    代码结果:

    (4, 4)
    
    • values属性也会以二维ndarray的形式返回DataFrame的数据:
    df2.values

    代码结果:

    array([[2018, 'Guangdong', 1.3, nan],
           [2018, 'Beijing', 2.5, nan],
           [2018, 'Qinghai', 1.1, nan],
           [2018, 'Fujiang', 0.7, nan]], dtype=object)
    
    • 列索引会作为DataFrame对象的属性:
    df2.Province

    代码结果:

    English
    one      Guangdong
    two        Beijing
    three      Qinghai
    four       Fujiang
    Name: Province, dtype: object
    

    二、DataFrame对象常见存取、赋值和删除方式:

    • DataFrame_object[ ] 能通过列索引来存取,当只有一个标签则返回Series,多于一个则返回DataFrame:
    df2['Province']
    代码结果: English one Guangdong two Beijing three Qinghai four Fujiang Name: Province, dtype: object
    df2[['Province','pop']]
    代码结果:
    ProvinceProvincepop
    English
    oneGuangdong1.3
    twoBeijing2.5
    threeQinghai1.1
    fourFujiang0.7
    • DataFrame_object.loc[ ] 能通过行索引来获取指定行:
    df2.loc['one']

    代码结果:

    Province
    year             2018
    Province    Guangdong
    pop               1.3
    debt              NaN
    Name: one, dtype: object
    
    df2.loc['one':'three']
    代码结果:
    ProvinceyearProvincepopdebt
    English
    one2018Guangdong1.3NaN
    two2018Beijing2.5NaN
    three2018Qinghai1.1NaN
    • 还可以获取单值
    df2.loc['one','Province']

    代码结果:

    'Guangdong'
    
    • DataFrame的列可以通过赋值(一个值或一组值)来修改
    df2["debt"]=np.arange(2,3,0.25)
    df2
    代码结果:
    ProvinceyearProvincepopdebt
    English
    one2018Guangdong1.32.00
    two2018Beijing2.52.25
    three2018Qinghai1.12.50
    four2018Fujiang0.72.75
    • 为不存在的列赋值会创建一个新的列,可通过del来删除
    df2['eastern']=df2.Province=='Guangdong'
    df2
    代码结果:
    ProvinceyearProvincepopdebteastern
    English
    one2018Guangdong1.32.00True
    two2018Beijing2.52.25False
    three2018Qinghai1.12.50False
    four2018Fujiang0.72.75False
    del df2['eastern']
    df2.columns

    代码结果:

    Index(['year', 'Province', 'pop', 'debt'], dtype='object', name='Province')
    
    • 当然,还可以转置
    df2.T
    Englishonetwothreefour
    Province
    year2018201820182018
    ProvinceGuangdongBeijingQinghaiFujiang
    pop1.32.51.10.7
    debt22.252.52.75

    三、多种创建DataFrame方式

    • 调用DataFrame()可以将多种格式的数据转换为DataFrame对象,它的的三个参数data、index和columns分别为数据、行索引和列索引。data可以是:

    1 二维数组

    df3=pd.DataFrame(np.random.randint(0,10,(4,4)),index=[1,2,3,4],columns=['A','B','C','D'])
    df3
    代码结果:
    ABCD
    19846
    25774
    36302
    44698

    2 字典

    行索引由index决定,列索引由字典的键决定

    dict1

    代码结果:

    {'Province': ['Guangdong', 'Beijing', 'Qinghai', 'Fujiang'],
     'pop': [1.3, 2.5, 1.1, 0.7],
     'year': [2018, 2018, 2018, 2018]}
    
    df4=pd.DataFrame(dict1,index=[1,2,3,4])
    df4
    代码结果:
    Provincepopyear
    1Guangdong1.32018
    2Beijing2.52018
    3Qinghai1.12018
    4Fujiang0.72018

    3 结构数组

    其中列索引由结构数组的字段名决定

    arr=np.array([('item1',10),('item2',20),('item3',30),('item4',40)],dtype=[("name","10S"),("count",int)])
    df5=pd.DataFrame(arr)
    df5
    代码结果:
    namecount
    0b’item1’10
    1b’item2’20
    2b’item3’30
    3b’item4’40
    • 此外可以调用from_开头的类方法,将特定的数据转换为DataFrame对象。例如from_dict(),其orient参数指定字典键对应的方向,默认为”columns”:
    dict2={"a":[1,2,3],"b":[4,5,6]}
    df6=pd.DataFrame.from_dict(dict2)
    df6
    代码结果:
    ab
    014
    125
    236
    df7=pd.DataFrame.from_dict(dict2,orient="index")
    df7
    代码结果:
    012
    a123
    b456

    四、将DataFrame对象转换为其他格式的数据

    • to_dict()方法将DataFrame对象转换为字典,参数orient决定字典元素的类型:
    df7.to_dict()

    代码结果:

    {0: {'a': 1, 'b': 4}, 1: {'a': 2, 'b': 5}, 2: {'a': 3, 'b': 6}}
    
    df7.to_dict(orient="records")

    代码结果:

    [{0: 1, 1: 2, 2: 3}, {0: 4, 1: 5, 2: 6}]
    
    df7.to_dict(orient="list")

    代码结果:

    {0: [1, 4], 1: [2, 5], 2: [3, 6]}
    
    • 类似的还有to_records()、to_csv()等

    谢谢大家的浏览,
    希望我的努力能帮助到您,
    共勉!

    展开全文
  • Pandas详解十五之利用GroupBy技术进行分组

    万次阅读 多人点赞 2018-04-26 21:30:24
    import pandas as pd import numpy as np GroupBy分组 对数据进行分组并对每个分组进行运算是数据分析中很重要的环节。该博客讲解了利用pandas的Groupby技术如何进行分组。下图简单介绍了分组的过程: ...
    约定: 
    
    import pandas as pd
    import numpy as np

    GroupBy分组

    对数据进行分组并对每个分组进行运算是数据分析中很重要的环节。该博客讲解了利用pandas的Groupby技术如何进行分组。下图简单介绍了分组的过程:

    这里写图片描述

    • 创建DataFrame对象
    df1=pd.DataFrame({'Data1':np.random.randint(0,10,5),'Data2':np.random.randint(10,20,5),'key1':list('aabba'),'key2':list('xyyxy')})
    df1
    代码结果:
    Data1Data2key1key2
    0515ax
    1215ay
    2617by
    3916bx
    4913ay
    • 分组特性和查看分组后的大小

    .groupby()返回的是pandas的groupby对象。gr1并未进行任何计算,但它包括了接下来计算所需的数据。

    gr1=df1['Data1'].groupby(df1['key1'])
    print(gr1)
    gr1.size()

    代码结果:

    <pandas.core.groupby.SeriesGroupBy object at 0x00000220D1A1EC88>
    key1
    a    3
    b    2
    Name: Data1, dtype: int64
    
    • 根据单列来对单列分组
    df1['Data1'].groupby(df1['key1']).count()

    代码结果:

    key1
    a    3
    b    2
    Name: Data1, dtype: int64
    
    • 根据单列来对多列分组
    df1[['Data1','Data2']].groupby(df1['key1']).mean()
    代码结果:
    Data1Data2
    key1
    a5.33333314.333333
    b7.50000016.500000
    • 根据多列单列分组

    注意,下例通过两列分组得到的是多级索引的Series对象,groupby()里面分组顺序不同而结果不同。

    df1['Data1'].groupby([df1['key1'],df1['key2']]).count()

    代码结果:

    key1  key2
    a     x       1
          y       2
    b     x       1
          y       1
    Name: Data1, dtype: int64
    
    • 根据多列多列分组

    下例通过两列分组得到的是多级索引的DataFrame对象。

    df1.groupby([df1['key1'],df1['key2']]).sum()
    代码结果:
    Data1Data2
    key1key2
    ax515
    y1128
    bx916
    y617
    • 除了上述用Series对象作为分组的依据,还可以是:列表、数组、字符串、字典等等。
    #列表
    df1['Data1'].groupby([1,2,3,2,1]).count()

    代码结果:

    1    2
    2    2
    3    1
    Name: Data1, dtype: int64
    
    #数组
    df1['Data1'].groupby(np.array([2,1,2,1,1])).count()

    代码结果:

    1    3
    2    2
    Name: Data1, dtype: int64
    
    #字符串
    df1[['Data1','key1']].groupby('key1').count()
    代码结果:
    Data1
    key1
    a3
    b2
    #字典 
    df1['Data1'].groupby({0:'y',1:'x',2:'x',3:'y',4:'z'}).count()

    代码结果:

    x    2
    y    2
    z    1
    Name: Data1, dtype: int64
    
    • 麻烦列’被消除

    当分组后进行shu数值计算时,不是数值类的列(即麻烦列)会被清除

    df1.groupby('key2').mean()
    代码结果:
    Data1Data2
    key2
    x7.00000015.5
    y5.66666715.0
    • 取分组的一列或某几列

    当数据特别巨大时,而我们只需某几列,这时这样的用法是十分省时又方便的。

    df1.groupby('key1')['Data1'].max()

    代码结果:

    key1
    a    9
    b    9
    Name: Data1, dtype: int32
    
    • 传入axis=1横向分组
    df1.groupby([1,1,2,1],axis=1).count()
    代码结果:
    12
    031
    131
    231
    331
    431
    • 接下来是分组后可运行的简单运算函数表:
      这里写图片描述

    谢谢大家的浏览,
    希望我的努力能帮助到您,
    共勉!

    展开全文
  • pandas模块学习(pandas详解)

    千次阅读 2019-01-02 15:55:42
    Pandas 百题大冲关 Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的...
  • Pandas详解 (下) 一. Excel文件的拆分与合并 1.1 一个文件夹下多个工作簿的合并【单独Sheet】 思路: 1,把文件夹下面所有的文件都遍历出来 2、循环读取每个文件 (1)第一次读取的文件放入一个空的表中,起名叫合并...
  • 1. Series格式 https://blog.csdn.net/weixin_42107718/article/details/98649208?utm_source=app 2. DataFrame格式 ...
  • pandas详解(DataFrame篇)

    万次阅读 多人点赞 2019-08-06 20:58:06
    文章目录引言:DataFrame: 引言: 什么是DataFrame? DataFrame:一个表格型的数据结构,包含有一组有序的列, ...至于对Series知识想进行回顾,请到我的这篇博文—pandas详解(Series篇) DataFrame: ...
  • pandas学习分享 安装 python -m pip install pandas python -m pip install pandas 使用 import pandas import numpy data = numpy.array(['tom','we','fef']) s = pandas.Series(data=data) y = pandas.Series...
  • Python-pandas详解

    2018-09-26 16:30:42
    一、pandas pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据...
  • python --Pandas详解

    2021-11-15 16:53:23
    pip install pandas 检验是否安装成功 import pandas print(pandas.__version__) 输出: 1.3.4 入门示例: import pandas as pd a = { '列名1': ['01', '02', '03'], '列名2': ['08', '09', '10'] } b = pd....
  • 聚合运算前言1. 创建DataFrame对象2. 单列聚合3. 多列聚合4. 多种聚合运算5. 多种聚合运算并更改列名6. 不同的列运用不同的聚合函数7....import pandas as pd df1 = pd.DataFrame({'sex':list('FFMFMMF'),'smoker':lis
  • pandas详解(Series篇)

    千次阅读 多人点赞 2019-08-06 20:50:10
    文章目录基础铺垫:pandas简介:pandas基本数据结构:Series:Series创建:Series索引:Series值的获取:Series运算:Series 缺失值检测:Series自动对齐:Series及其索引的name属性: 基础铺垫: pandas简介: &...
  • import pandas as pd 轴向连接-Concat 在数据处理中,通常将原始数据分开几个部分进行处理而得到相似结构的Series或DataFrame对象,我们该如何进行纵向合并它们?这时我们可以选择用pd.concat()方式极易...
  • Pandas详解五之下标存取

    千次阅读 2018-03-16 13:08:54
    import pandas as pd import numpy as np 下标存取 Series和DataFrame提供了丰富的下标存取方法,除了直接用[ ],还有.loc[ ]、.iloc[ ]、.at[ ]、.iat[ ]和.ix[ ]等存取方式。 np.random.seed(42) df1=pd....
  • Pandas详解一之Series对象

    万次阅读 多人点赞 2018-03-15 19:20:19
    import pandas as pd from pandas import Series,DataFrame import numpy as np Series 一、Series属性及方法 Series是Pandas中最基本的对象,Series类似一种一维数组: se1=Series([4,7,-2,8]) se1 ...
  • Pandas详解十一之Fillna填充缺失数据

    万次阅读 多人点赞 2018-03-17 23:00:18
    import pandas as pd import numpy as np from numpy import nan as NaN 填充缺失数据 fillna()是最主要的处理方式了。 df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]]) df1 代码结果...
  • import pandas as pd Merge-数据库风格的合并 数据的合并(merge)和连接(join)是我们在数据分析和挖掘中不可或缺的,是通过一个或一个以上的键连接的。pandas的合并(merge)的的绝大功能和数据库操作...
  • s = pd.Series(["a1", "b2", "c3"], ["A11", "B22", "C33"], dtype="string") s.index

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,381
精华内容 3,752
关键字:

pandas详解