+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-04(14)

2020-05(22)

2020-06(45)

2020-07(31)

2020-08(32)

Python pandas基础——常用属性、方法和函数

发布于2021-04-03 16:23     阅读(364)     评论(0)     点赞(22)     收藏(1)


0

1

2

3

4

5

6

一、简介

这里简单介绍了创建Series和DataFrame的几种方法,这里简单介绍了查找数据的几种方法,这里简单介绍了pandas汇总和计算描述统计的几种方法。本文继续介绍一些pandas常用的属性、方法和函数。

二、常用的属性、方法和函数

先创建一个DataFrame,作为例子演示用。

import pandas as pd

data = {'name': ['apolo', 'adm', 'bolon', 'ali', 'cathy', 'devn', 'elov'],
        'age': [18, 29, 32, 28, 34, 19, None],
        'sex': ['male', 'female', 'male', 'male', 'female', 'male', 'female'],
        'weight': [67, 78, 87, 59, 90, 101, 78],
        'height': [170, 189, 190, 179, None, 160, 185]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e','f', 'g'])
df

输出

    name	age	    sex	weight	height
a	apolo	18.0	male	67	170.0
b	adm	    29.0	female	78	189.0
c	bolon	32.0	male	87	190.0
d	ali	    28.0	male	59	179.0
e	cathy	34.0	female	90	NaN
f	devn	19.0	male	101	160.0
g	elov	NaN	   female	78	185.0

2.1 shape

返回Series和DataFrame的大小。

DataFrame

df.shape

输出:是个元组类型,可继续用df.shape[0]获取第一个值,用df.shape[1]获取第二个值

(7, 5)

Series

df['age'].shape

输出:是个元组类型,可继续用df.shape[0]获取第一个值,但不能用df.shape[1]获取第二个值

(7,)

2.2 排序

pandas中的排序一般用的比较多的有三种:索引排序——sort_index(),值排序——sort_values,排名——rank(),接下来逐一介绍:

2.2.1 索引排序——sort_index()

索引排序,顾名思义就是将数据按照索引名进行排序,下面给出几个例子具体说明一下。

原DataFrame:

    name	age	    sex  weight height
a	apolo	18.0	male	67	170.0
i	adm	    29.0	female	78	189.0
c	bolon	32.0	male	87	190.0
d	ali	    28.0	male	59	179.0
h	cathy	34.0	female	90	NaN
f	devn	19.0	male	101	160.0
g	elov	NaN	  female	78	185.0

df.sort_index()

输出:默认是对行索引进行升序排列。可通过设置axis=1按照列索引名排序,此时会改变列的顺序,而不是行的顺序。可通过设置ascending=False进行降序排列。默认的是不改变原df的顺序,可通过设置inplace=True进行改变原df的顺序。Series也类似,只不过不能设置axis=1

    name	age	    sex	  weight height
a	apolo	18.0	male	67	170.0
c	bolon	32.0	male	87	190.0
d	ali	    28.0	male	59	179.0
f	devn	19.0	male	101	160.0
g	elov	NaN	    female	78	185.0
h	cathy	34.0	female	90	NaN
i	adm	    29.0	female	78	189.0

2.2.2 值排序——sort_values()

值排序和索引排序的用法及功能类似,只不过在运用值排序的时候需要指定按照哪一列或哪几列的值进行排序。

df.sort_values(by='age')

输出:按照age列的数据进行升序排序。当指定axis=1时,传给by参数的是行索引的名字,此时按照那一行的数据进行排序;同样可指定ascending=False进行降序排列,也可设置inplace=True进行改变原df的顺序;也可传给by参数一个列表,此时将按照列表中名称的顺序,以此将数据进行排序。Series也类似,只不过不能设置axis=1,也不用传入参数by。

    name	age	     sex  weight height
i	adm	    18.0	female	78	189.0
f	devn	19.0	male	101	160.0
g	elov	28.0	female	78	185.0
a	apolo	29.0	male	67	170.0
h	cathy	32.0	female	90	NaN
c	bolon	34.0	male	87	190.0
d	ali	     NaN	male	59	179.0

2.2.3 排名——rank()

前两个都是返回排序后的数据,rank()则是返回各个数据的排名,并不返回原数据。

df.rank()

输出:直接对DataFrame进行rank,会返回所有数据的排名。默认的是返回排名的平均值,即如果值相同,那么取这些值的排名的平均值作为这些值的排名(比如sex列,female值相同,应该排在前3,因此取(1+2+3)/3=2作为female的排名),可以通过method='first'设为按值在原始数据中的出现顺序分配排名,只不过不支持非数值型数据。同样也有参数axisascending

   name	age	sex	weight height
a	3.0	1.0	5.5	2.0	   2.0
i	1.0	4.0	2.0	3.5	   5.0
c	4.0	5.0	5.5	5.0	   6.0
d	2.0	3.0	5.5	1.0	   3.0
h	5.0	6.0	2.0	6.0	   NaN
f	6.0	2.0	5.5	7.0	   1.0
g	7.0	NaN	2.0	3.5	   4.0

2.3 数据合并

pandas中数据合并一般包括pd.merge,pd.concat,下面逐一介绍它们。

2.3.1 merge()

关于pd.merge(),这篇文章讲的很详细,也很全面。另外需要补充说明的是,merge()和sql中表的连接很像,有个参数是how,默认的是inner,可选{'left', 'right', 'outer', 'inner', 'cross'},这个对应着sql中的连接方式,是内连接,还是左连接,右连接。

2.3.2 concat()

pd.concat(
    objs: Union[Iterable[ForwardRef('NDFrame')], Mapping[Optional[Hashable], ForwardRef('NDFrame')]],
    axis=0,
    join='outer',
    ignore_index: bool = False,
    keys=None,
    levels=None,
    names=None,
    verify_integrity: bool = False,
    sort: bool = False,
    copy: bool = True,
)

其中,objs是要合并的df,可以将待合并的df放到一个列表里,一起传入,可以是两个df,也可以是多个df;axis=0意思是默认按列合并;join='outer'意思是默认取并集,可设置为'inner'改为取交集;

通过几个例子来说明这个函数的用法。

先建立两个DataFrame:

data1 = {'name': ['apolo', 'adm', 'bolon', 'ali', 'cathy', 'devn', 'elov'],
        'age': [18, 29, 32, 28, 34, 19, None],
        'sex': ['male', 'female', 'male', 'male', 'female', 'male', 'female'],
        'weight': [67, 78, 87, 59, 90, 101, 78],
        'height': [170, 189, 190, 179, None, 160, 185]}
df1 = pd.DataFrame(data1, index=['a', 'i', 'c', 'd', 'h','f', 'g'])
df1

输出

    name	age	    sex	weight	height
a	apolo	18.0	male	67	170.0
i	adm	    29.0	female	78	189.0
c	bolon	32.0	male	87	190.0
d	ali	    28.0	male	59	179.0
h	cathy	34.0	female	90	NaN
f	devn	19.0	male	101	160.0
g	elov	NaN	    female	78	185.0
data2 = {'name': ['apolo', 'adm', 'bolon', 'ali', 'cathy'],
        'age': [18, 29, 32, 28, None],
        'sex': ['male', 'male', 'female', 'male', 'female'],
        'country': ['BR', 'MX', 'CL', 'BR', 'CO']}
df2 = pd.DataFrame(data2, index=['a', 'b', 'm', 'n', 'h'])
df2

输出

    name	age	    sex	country
a	apolo	18.0	male	BR
b	adm	    29.0	male	MX
m	bolon	32.0	female	CL
n	ali	    28.0	male	BR
h	cathy	NaN	   female	CO

直接用concat()将上述两个df进行合并。

result = pd.concat([df1, df2])
result

输出:可以看到,新的数据集的行和列都比之前的两个df多,而且是它们的并集。对于只在一个df中出现的列(如country,只在df2中出现),该列在另一个df对应的索引的值是空值。

    name	 age	sex	   weight	height	country
a	apolo	18.0	male	67.0	170.0	NaN
i	adm	    29.0	female	78.0	189.0	NaN
c	bolon	32.0	male	87.0	190.0	NaN
d	ali	    28.0	male	59.0	179.0	NaN
h	cathy	34.0	female	90.0	NaN	    NaN
f	devn	19.0	male	101.0	160.0	NaN
g	elov	NaN	   female	78.0	185.0	NaN
0	apolo	18.0	male	NaN	     NaN	BR
1	adm	    29.0	male	NaN	     NaN	MX
2	bolon	32.0	female	NaN	     NaN	CL
3	ali	    28.0	male	NaN	     NaN	BR
4	cathy	NaN	   female	NaN	     NaN	CO

设置axis=1

result = pd.concat([df1, df2], axis=1)
result

输出

   	name	age	     sex	weight	height	name	age	    sex	  country
a	apolo	18.0	male	67.0	170.0	apolo	18.0	male	BR
i	adm	    29.0	female	78.0	189.0	NaN	     NaN	NaN	    NaN
c	bolon	32.0	male	87.0	190.0	NaN	     NaN	NaN	    NaN
d	ali	    28.0	male	59.0	179.0	NaN	     NaN	NaN	    NaN
h	cathy	34.0	female	90.0	NaN	   cathy	 NaN	female	CO
f	devn	19.0	male	101.0	160.0	NaN	     NaN	NaN	    NaN
g	elov	NaN	   female	78.0	185.0	NaN	     NaN	NaN  	NaN
b	NaN	    NaN	    NaN	     NaN	NaN	    adm	    29.0	male	MX
m	NaN	    NaN	    NaN	     NaN	NaN	   bolon	32.0	female	CL
n	NaN	    NaN	    NaN	     NaN	NaN	    ali	    28.0	male	BR

原文链接:https://blog.csdn.net/TSzero/article/details/115379996

0

1

2

3

4

5

6

7

8



所属网站分类: 技术文章 > 博客

作者:高富帅

链接: https://www.pythonheidong.com/blog/article/915179/1ca24c077bfea701bf70/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)