pandas filter_Pandas基础入门(一)

一、Pandas简介

Pandas是一个强大的分析结构化数据的工具集;

(Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法,能够快速便捷地处理数据)

它的使用基础是Numpy(提供高性能的矩阵运算);

用于数据挖掘和数据分析,同时也提供数据清洗功能

文末放上代码、参考资料和相关数据文件

#全部行都能输出

二、基本操作

1.导入Pandas库并简写为pd,并输出版本号

import 

'1.0.3'

2.从列表创建Series

arr 

230d0e52fdaf9b9cb420bfc948c04228.png

三、文件读取与写入

1. 读取

1) csv格式

df 

9c76a4ed45196e6b1dbaecc8d0c9cb4c.png

2) txt格式

df_txt 

cb2f14fa90432468bc5ba23a6fa82f8c.png

3) xls或xlxs格式

df_excel 

507853193065a3e0b4d06fbd8d04e131.png

2. 写入

1) csv格式

df

2) xls或xlsx格式

df

三、基本数据结构

1. 什么是Series

91e1a7502f7f8ecea6f8e99a612578f2.png

创建Series

ff5aeb398a4692a75efd57e801c92953.png

1) 创建一个Series

#通过ndarray创建Series

dfaa8a1d0d4a70b90f4be52fec861daf.png
ser1 

216e62f3d1ec68a31e06776996c33d28.png
ser1 

6706e8e69bac02d1b19e29c9150d6ca7.png
#通过字典创建Series

76e1b9bb1c120bcdf307c376b311571d.png
ser2 

fa47dd36c8b20a9fc3172097bf0379b6.png

类 ndarray 的对象传入后也会转换为 ndarray 来创建 Series 。

#通过列表创建Series

fadd3bd4d55940950e81c2d3fecca932.png
ser3 

baebd92758407d5bf67d5df542481ca9.png
# 通过标量创建Series 当data只包含一个元素时,Series对象的定义支持"循环补齐"

d2255147cdd11668b15bb63f97e5bf05.png
s 

e2b03bd3d4be4efcd6a2435d462bc4b3.png

创建Series的方法

  • 1 通过ndarray创建,可指定索引,但是指定索引的个数要和ndarray对象里边元素的个数一致
  • 2 通过字典创建,不需要指定索婷,字典的键即索引
  • 3 通过类ndarray对象创建,比如说列表,可以指定索引,但是之低昂索引的个数要和ndarray里边元素的个数一致
  • 4 参数data可以是一个单独的标量,传入索引后,每个索引对应的都是统一数值的标量

2f97128f1a9d42aa185cf16287fff492.png

2) 访问Series属性

s

b02454fa1dc352e407996dedb6ea6814.png
s

ebacac799ab1353778eb77f18324f68b.png
s

1db3fd4a378487b1d66f66a0bb05e63f.png
s

733a739d2f089945bca8e3683f109d00.png
s

3db9767c12525848fe8def148fe54825.png

Series 数组和字典特性

  • Series可以进行索引和切片操作
  • Series 同时也像一个固定大小的 dict ,可以通过索引标签获取和设置值
  • Series 与 ndarray 非常相似,是大多数 NumPy 函数的有效参数

3) 数组特性

s

8ae55938b9a560ca7fe18a59897c5109.png
s

0.5113156521513135

s

05400f73115bf8237d45c3237302d8b4.png
s

e8c66b9cd444dae3175be39a017f9de3.png
s

3737afe45c18818de17fdbbc0bcd060c.png
s

f6ec1f55566a26321c1926eab3d3bdd7.png
s

266b072c5c8b490887a75114a2060cf8.png
s

5093403034a4f18a44a319ffa9b16546.png

4) 字典特性

Series 同时也像一个固定大小的 dict ,可以通过索引标签获取和设置值:

s

1.0

s

fb20fa5c489c3f1ec67e66fe72c7dbd5.png
s

7cc0ce680600097c9878edd0980b5a2e.png
s

ee03c63b4dbb090ce3219358f13aaa49.png
'a' 

True

'h' 

False

s

没有这个键

5) 调用方法

s

-0.060346936266615005

Series有相当多的方法可以调用:

print

['T', 'a', 'abs', 'add', 'add_prefix', 'add_suffix', 'agg', 'aggregate', 'align', 'all', 'any', 'append', 'apply', 'argmax', 'argmin', 'argsort', 'array', 'asfreq', 'asof', 'astype', 'at', 'at_time', 'attrs', 'autocorr', 'axes', 'b', 'between', 'between_time', 'bfill', 'bool', 'c', 'clip', 'combine', 'combine_first', 'convert_dtypes', 'copy', 'corr', 'count', 'cov', 'cummax', 'cummin', 'cumprod', 'cumsum', 'd', 'describe', 'diff', 'div', 'divide', 'divmod', 'dot', 'drop', 'drop_duplicates', 'droplevel', 'dropna', 'dtype', 'dtypes', 'duplicated', 'e', 'empty', 'eq', 'equals', 'ewm', 'expanding', 'explode', 'factorize', 'ffill', 'fillna', 'filter', 'first', 'first_valid_index', 'floordiv', 'ge', 'get', 'groupby', 'gt', 'hasnans', 'head', 'hist', 'iat', 'idxmax', 'idxmin', 'iloc', 'index', 'infer_objects', 'interpolate', 'is_monotonic', 'is_monotonic_decreasing', 'is_monotonic_increasing', 'is_unique', 'isin', 'isna', 'isnull', 'item', 'items', 'iteritems', 'keys', 'kurt', 'kurtosis', 'last', 'last_valid_index', 'le', 'loc', 'lt', 'mad', 'map', 'mask', 'max', 'mean', 'median', 'memory_usage', 'min', 'mod', 'mode', 'mul', 'multiply', 'name', 'nbytes', 'ndim', 'ne', 'nlargest', 'notna', 'notnull', 'nsmallest', 'nunique', 'pct_change', 'pipe', 'plot', 'pop', 'pow', 'prod', 'product', 'quantile', 'radd', 'rank', 'ravel', 'rdiv', 'rdivmod', 'reindex', 'reindex_like', 'rename', 'rename_axis', 'reorder_levels', 'repeat', 'replace', 'resample', 'reset_index', 'rfloordiv', 'rmod', 'rmul', 'rolling', 'round', 'rpow', 'rsub', 'rtruediv', 'sample', 'searchsorted', 'sem', 'set_axis', 'shape', 'shift', 'size', 'skew', 'slice_shift', 'sort_index', 'sort_values', 'squeeze', 'std', 'sub', 'subtract', 'sum', 'swapaxes', 'swaplevel', 'tail', 'take', 'to_clipboard', 'to_csv', 'to_dict', 'to_excel', 'to_frame', 'to_hdf', 'to_json', 'to_latex', 'to_list', 'to_markdown', 'to_numpy', 'to_period', 'to_pickle', 'to_sql', 'to_string', 'to_timestamp', 'to_xarray', 'transform', 'transpose', 'truediv', 'truncate', 'tshift', 'tz_convert', 'tz_localize', 'unique', 'unstack', 'update', 'value_counts', 'values', 'var', 'view', 'where', 'xs']

2.DataFrame

DataFrame是一个可以包含不同数据类型列的二维数据结构,类似于电子表格或SQL表,或Series对象的字典集合,是最常用的pandas对象。

1)创建DataFrame

和 Series 类似,创建 DataFrame 时,也接受许多不同类的参数。虽然在绝大多数情况下,我们通过读取文件来创建 DataFrame。 DataFrame 可以从序列类的数据构建:

方法一 : 包含列表的字典创建

#使用包含列表的字典创建DataFrame时,各个列表内元素个数必须一致

7bfd6b4d51b4fbe9d6a4b25cf55c3055.png

方法二 : 包含series的类字典创建

data 

289eb7d5b0adc3b6c8af13c274e143be.png
data = {'员工姓名':pd.Series(['赵一','钱明','周元','李雷'],index = ['001','002','003','004']),  #指定index与不指定index的区别
       '销售业绩':pd.Series([30000,20000,50000],index = ['001','002','003']),
       '提成收入':pd.Series([6000,4000,10000],index = ['001','002','003'])}
df2 = pd.DataFrame(data)
df2

b64b04559d4884f23810ac30ca359fe0.png
pd

8732aaf4391178c431636c1652a35879.png
pd

85c19c371e925fed82ad937cc2541dc8.png
df 

0186f6f409ee1c32eeafbebe31804fee.png

2) 访问索引和列名

df

2b3b8e71bab5eba277fdcc4a0ba7bcbc.png
df

4c0c2496410531beb57296506cbfa567.png
df

9e56777e802020cdb6bbfda600c1ec14.png

3) DataFrame 列操作

DataFrame 列的选取,设置和删除列的工作原理与类似的 dict 操作相同。

df

c9da11311b07f5f02bcc97a6e37ec2cd.png
type

pandas.core.frame.DataFrame

type

pandas.core.series.Series

4) 增加列

df2

8cde544e7ae27b96de6e80a2a41182fc.png
df2

d95f135cc8956aec47f2289b3d4648fa.png
df2

ac2877b152d7098a6ae59608b164c904.png
df2

f144bf683cc1c8621fa975292b95a18c.png
#如果新增的列中传入的是 Series 并且索引不完全相同,那么会默认按照索引对齐,没有指定填充值的位置默认用空值进行填充:

039fb0011292762a18d5d435b9a18171.png

insert方法插入列

df2

3a7c2f7c8b723fc18cce6451a7f4eb47.png
df2

bc4204310c102410b450296006918aaa.png
df2

4c3758f14f9c3c7232628df1ee27a68f.png

删除或移出列

del 

c1616d3d6e8a9673bcff737e6fa65f2b.png
df2

ca1d467a8b47f4d4982a89e45a1624ee.png
df2

0eba59d93e5e77c29c0e8a04f1f0e626.png
df2

4fe5d83cabaea0b21d80ae2cd94be5c5.png
df2

509837a52b0e1c4fa740dc015b934b46.png

分配列的操作

assign方法,依据现有列派生的新列

df2

79d92956e238abd4ecbc3139ae508b79.png
df2

ece426dc9258a8fbb5cc535ea2ebdae2.png
df2

7a1d8045d738d909520492e7de0a0433.png
df2

b07be96d1af59a1ef63f357cc5a0c4cb.png

5) 调用属性和方法

df2

1f3975b7c9a7e8e799d07202141397bb.png
df2

a6ff09b397114b92fb5691d55129e7c5.png
df2

73899228588adbc152686243dbaba4dc.png
df2

(4, 9)

df2

80e5944fba278b093baca894003c8352.png

6) 索引/选择

索引/选择的基本语法如下:

28ba59807b2bbe7092455a062429eae0.png
这是Pandas中非常强大的特性,不理解这一特性有时就会造成一些麻烦
df3 = pd.DataFrame({'A':[1,2,3]},index=[1,2,3])
df4 = pd.DataFrame({'A':[1,2,3]},index=[3,1,2])
df3-df4 #由于索引对齐,因此结果不是0

6a4899362d329f5752cb3c4bb0bc8ecc.png

根据类型选择列

df

a1cb92767e531562d791da2e4d4a47b7.png
df

7570ee8f791677c62087812d64537234.png

7)基于标签的索引

.loc 是基于标签的索引,必须使用数据的标签属性,否则会返回一个异常。

基于标签索引的基本语法 : df.loc[行索引,列索引]

逗号之前是切取的行信息,逗号之后是切取的列信息

只切取行信息返回所有列信息的时候,列索引和逗号可以省略

只切取列信息返回所有行信息的时候,行索引和冒号不能省略,用冒号表示切取所有行.

df2

535c2f950e176a8aec5ccc9598f2e653.png
df2

a5db57007e6371668f6f076eb0586728.png

直接切取一行信息的时候 - df["行信息":"行信息"] 返回是dataframe
- (基于标签的索引)df.loc["行信息"] 返回的是series

df2

c2beac0ab9d4187b4f0d3b887ab93386.png
df2

15fa4503ff091b7d64eeb41cef8c1127.png
df2

b18600e8e6d3390a03bffaedea66e87a.png
df2

3b5516153d22c40d7cf11a2ea61d2c7c.png
df2

612f2aa179e73b2e3a634b39831e8d31.png
df2

3784264a3b7dcd13ae0c75e2bc4a4d35.png
df2

4e7915525076421a734154f130c90883.png
df2

c564fa6e05c3004ec362ca7401e784ad.png

指向具体一列的某个记录值 df.at[行索引,列索引]

df2

'赵一'

df2

125.0

df2

'赵一'

df2

2550e13c8e63ba2243712eed71ca5102.png

.loc 同时也可以用来扩展数据的列:

df2

f97209a02d3798accc20c834bc4d0d0d.png

新建一列,新建列里边的信息是基于某一已经存在的列,并且对该存在列中的每个信息进行相同的函数(X)操作,用apply()函数,函数特点是它的参数是其他函数(X)

df2

112357fd2708a4693b81fb0510d77de9.png
df2

50a82f073bafe576c4728417ec3b7515.png

.loc 同时也可以用来扩展数据的行:

df2

283feeff5bd6081fb69d92207e653f7f.png
df2

680e84d62ac05bdca5407f2851b7fddd.png

8) 将Series转换为DataFrame

s 

95ae91f43c9eac15766812daded7cd5c.png
s

da93d94d2c122e27fc97fb85308a8aa9.png

使用T符号可以转置

s

fc18f81aa1dc402386ba48a7f9e90dcd.png

四、常用基本函数

df 

1) head和tail

df

e30556dc0dd84b5e1da432d9bf34258c.png
df

8495c85ae6519af84fa2505a4f99d0f4.png
df

de71b71b114ea8bb3b6f9b31a3d43220.png

2) unique和nunique

df

7

df

ebc5af7d51cf6c9f343c74b55f173680.png

3) count和value_counts

df

565cf23d9fdc579281821c1a9ce77192.png
df

35

df

ab511ccdce1964d0d6c7dba16b32970a.png

4) describe和info

df

a5092b5925aaccd8c49045b6de50c451.png
df

c6809cb5e1e9318fb665e69c55c6fe98.png
df

b1968c6c71289a0a4ebb23faefb39825.png
df

e78b3e02ad7d1c58f33cb7973dcca7c7.png

5) idxmax和nlargest

df

5

df

5d0af86e9ef47f00919f6d3c3d51ebd8.png

6) clip和replace

clip和replace是两类替换函数

clip是对超过或者低于某些值的数进行截断

df

7f18de34b422113bdc9dfe3465124821.png
df

b91a3b4a29a90cec37568dea702203b3.png
df

16.924244897959188

replace是对某些值进行替换

df

154cc369ec76d47a901c21904720236d.png
df

6b56b523e360f73afa84cee7af0138e6.png

通过字典,可以直接在表中修改

df

93b4248498b6e065fdd324a6b7dd33ec.png

7) apply函数

apply是一个自由度很高的函数,对于Series,它可以迭代每一列的值操作:

df

3cb6ccff4776dfaf32a6b87985cedf03.png

对于DataFrame,它可以迭代每一个列操作:

df

419abd44ab2367e46f42d1cbda702de7.png

五、排序

1) 索引排序

df

36c817f1d035e04375c9ed9a2007aab2.png
df

fd03d85903e08a3800a91111ff831eaa.png
df

6eeeb1a119557bb4d2967d2d082e983b.png

2) 值排序

df

08217be37b8e75b89ebffbc3f635d635.png

多个值排序,即先对第一层排,在第一层相同的情况下对第二层排序

df

0f2fd88ac4c908e081d8d2d3d5fae687.png

六、问题与练习

1. 问题

【问题一】 Series和DataFrame有哪些常见属性和方法?

【问题二】 value_counts会统计缺失值吗?

【问题三】 与idxmax和nlargest功能相反的是哪两组函数?

【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。

sum/mean/median/mad/min/max/abs/std/var/quantile/cummax/cumsum/cumprod

【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?第一问提到的函数也有axis参数吗?怎么使用?

2. 练习

【练习一】 现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:

(a)在所有的数据中,一共出现了多少人物?

(b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?

(c)以单词计数,谁说了最多的单词?

df5 

d3784c515f6563ed768199967bc6dddd.png

(a)在所有的数据中,一共出现了多少人物?

(b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?

(c)以单词计数,谁说了最多的单词?

【练习二】现有一份关于科比的投篮数据集,请解决如下问题:

(a)哪种action_type和combined_shot_type的组合是最多的?

(b)在所有被记录的game_id中,遭遇到最多的opponent是一个支?

df6 

c55750d3810a34ddf2f902b7f2b565d6.png

(a)哪种action_type和combined_shot_type的组合是最多的?

(b)在所有被记录的game_id中,遭遇到最多的opponent是一个支?


代码:

https://github.com/CrescentRuby/pandas/blob/master/Pandas%E5%9F%BA%E7%A1%80(%E4%B8%80).ipynb​github.com

六、参考资料

1、Python for Data Analysis Wes McKinney著

2、Pandas Cookbook Theodore Petrou著

3、User Guide Pandas开发团队编写

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值