暂无分类
暂无标签
发布于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
返回Series和DataFrame的大小。
DataFrame
df.shape
输出:是个元组类型,可继续用df.shape[0]
获取第一个值,用df.shape[1]
获取第二个值
(7, 5)
Series
df['age'].shape
输出:是个元组类型,可继续用df.shape[0]
获取第一个值,但不能用df.shape[1]
获取第二个值
(7,)
pandas中的排序一般用的比较多的有三种:索引排序——sort_index()
,值排序——sort_values
,排名——rank()
,接下来逐一介绍:
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
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
rank()
前两个都是返回排序后的数据,rank()则是返回各个数据的排名,并不返回原数据。
df.rank()
输出:直接对DataFrame进行rank,会返回所有数据的排名。默认的是返回排名的平均值,即如果值相同,那么取这些值的排名的平均值作为这些值的排名(比如sex列,female值相同,应该排在前3,因此取(1+2+3)/3=2作为female的排名),可以通过method='first'
设为按值在原始数据中的出现顺序分配排名,只不过不支持非数值型数据。同样也有参数axis
,ascending
。
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
pandas中数据合并一般包括pd.merge,pd.concat,下面逐一介绍它们。
关于pd.merge(),这篇文章讲的很详细,也很全面。另外需要补充说明的是,merge()和sql中表的连接很像,有个参数是how
,默认的是inner
,可选{'left', 'right', 'outer', 'inner', 'cross'}
,这个对应着sql中的连接方式,是内连接,还是左连接,右连接。
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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!