全网最全的Pandas入门教程(精简版)

本教程详细介绍Pandas库的基础使用,包括DataFrame的创建、属性、常用操作,数据选择方法,处理NaN数据,导入导出数据,合并DataFrame及绘图功能。适合初学者快速上手Pandas进行数据分析。

pandas基础教程

目录

一 DataFrame

   1.1 创建Series

   1.2 创建时间序列

   1.3 创建DataFrame

   1.4 DataFrame属性

   1.5 DataFrame常用操作

二 数据选择

   2.1 选择列

   2.2 选择行

   2.3 标签选择:loc

   2.4 位置选择:iloc

   2.5 混合标签与位置:ix

   2.6 Boolean选择

三 处理NaN数据

   3.1 删除NaN数据

   3.2 填充NaN数据

   3.3 检查是否存在NaN

四 导入与导出

五 合并DataFrame

   5.1 concat函数

   5.2 append函数

   5.3 merge函数

六 绘图

首先先介绍一下什么是Pandas ?Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

首先引入相关模块:

import numpy as np
import pandas as pd

01

DataFrame

第一章 DataFrame

1.1 创建Series

index不指定则从0开始编号

s = pd.Series([1, 2, 3, np.nan], index=['A', 'B', 'C', 'D'])
print s

输出 
A 1.0 
B 2.0 
C 3.0 
D NaN 
dtype: float64

第一章 DataFrame

1.2 创建时间序列

必须指定start、end、periods中的两个参数值

dates = pd.date_range('20180101', periods=5)
print dates

输出 

DatetimeIndex([‘2018-01-01’, ‘2018-01-02’, ‘2018-01-03’, ‘2018-01-04’, 

‘2018-01-05’], 

dtype=’datetime64[ns]’, freq=’D’)

第一章 DataFrame

1.3 创建DataFrame

必须指定start、end、periods中的两个参数值

df = pd.DataFrame(np.random.rand(3,4),columns=['a', 'b', 'c', 'd'])
print df

输出 

a b c d 

0 0.233310 0.170256 0.036988 0.697916 

1 0.159580 0.287814 0.528123 0.956051 

2 0.815038 0.438103 0.143477 0.769143

通过字典创建(key为列名):

df = pd.DataFrame({'A': 1,
                   'B': pd.Timestamp('20171208'),
                   'C': pd.Series(np.arange(4)),
                   'D': pd.Categorical(['test', 'train', 'test', 'train'])})
print df

输出 

A B C D 

0 1 2017-12-08 0 test 

1 1 2017-12-08 1 train 

2 1 2017-12-08 2 test 

3 1 2017-12-08 3 train

第一章 DataFrame

1.4 DataFrame属性

df = pd.DataFrame({'A': 1,
                   'B': pd.Timestamp('20171208'),
                   'C': pd.Series(np.arange(4)),
                   'D': pd.Categorical(['test', 'train', 'test', 'train'])})

查看每列数据类型

print df.dtypes

输出 
A int64 
B datetime64[ns] 
C int32 
D category 
dtype: object

查看索引

print df.index  

输出 
RangeIndex(start=0, stop=4, step=1)

查看列名

print df.columns

输出 
Index([u’A’, u’B’, u’C’, u’D’], dtype=’object’)

查看数据

print df.values  

输出 

[[1L Timestamp(‘2017-12-08 00:00:00’) 0 ‘test’] 

[1L Timestamp(‘2017-12-08 00:00:00’) 1 ‘train’] 

[1L Timestamp(‘2017-12-08 00:00:00’) 2 ‘test’] 

[1L Timestamp(‘2017-12-08 00:00:00’) 3 ‘train’]]

DataFrame统计信息

print df.describe()

输出 

A C 

count 4.0 4.000000 

mean 1.0 1.500000 

std 0.0 1.290994 

min 1.0 0.000000 

25% 1.0 0.750000 

50% 1.0 1.500000 

75% 1.0 2.250000 

max 1.0 3.000000

第一章 DataFrame

1.5 DataFrame常用操作

转置

df = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a', 'b', 'c', 'd'])
print df.T

输出 
0 1 2 
a 0 4 8 
b 1 5 9 
c 2 6 10 
d 3 7 11

按index排序

df = pd.DataFrame(np.arange(12).reshape((3, 4)), columns=['a', 'b', 'c', 'd'])
print df.sort_index(axis=1, ascending=False)

输出 
d c b a 
0 3 2 1 0 
1 7 6 5 4 
2 11 10 9 8

按值排序

df = pd.DataFrame(np.arange(12).reshape((3, 4)), columns=['a', 'b', 'c', 'd'])
print df.sort_values(by='b', ascending=False)

输出 
a b c d 
2 8 9 10 11 
1 4 5 6 7 
0 0 1 2 3

02

数据选择

创建如下dataframe:

dates = pd.date_range('20180101', periods=3)
df = pd.DataFrame(np.arange(12).reshape((3, 4)),
                  index=dates, columns=['a', 'b', 'c', 'd'])
print df

输出 
a b c d 
2018-01-01 0 1 2 3 
2018-01-02 4 5 6 7 
2018-01-03 8 9 10 11

第二章 数据选择

2.1 选择列

print df['a']  # print df.a

输出 
2018-01-01 0 
2018-01-02 4 
2018-01-03 8

第二章 数据选择

2.2 选择行

print df[0:2]  # print df['20180101':'20180102']

输出 
a b c d 
2018-01-01 0 1 2 3 
2018-01-02 4 5 6 7

第二章 数据选择

2.3 标签选择:loc

print df.loc[:,['a', 'b']] 

输出 
a b 
2018-01-01 0 1 
2018-01-02 4 5 
2018-01-03 8 9

print df.loc['20180102']

输出 
a 4 
b 5 
c 6 
d 7 
Name: 2018-01-02 00:00:00, dtype: int32

第二章 数据选择

2.4 位置选择:iloc

print df.iloc[[0, 2], 2:4]

输出 
c d 
2018-01-01 2 3 
2018-01-03 10 11

第二章 数据选择

2.5 混合标签与位置:ix

print df.ix[:2, ['c', 'd']]

输出 
c d 
2018-01-01 2 3 
2018-01-02 6 7

第二章 数据选择

2.6 Boolean选择

rint df[df.a < 5]

输出 
a b c d 
2018-01-01 0 1 2 3 
2018-01-02 4 5 6 7

03

处理NaN数据

首先创建包含NaN的dataframe:

dates = pd.date_range('20180101', periods=3)
df = pd.DataFrame(np.arange(12).reshape((3, 4)),
                  index=dates, columns=['a', 'b', 'c', 'd'])
df.iloc[1, 1], df.iloc[2, 2] = np.nan, np.nan
print df

输出 
a b c d 
2018-01-01 0 1.0 2.0 3 
2018-01-02 4 NaN 6.0 7 
2018-01-03 8 9.0 NaN 11

第三章 处理NaN数据

3.1 删除NaN数据

print df.dropna(axis=1)  # how = ['any', 'all']

输出 
a d 
2018-01-01 0 3 
2018-01-02 4 7 
2018-01-03 8 11

第三章 处理NaN数据

3.2 填充NaN数据

print df.fillna(value='*')

输出 
a b c d 
2018-01-01 0 1 2 3 
2018-01-02 4 * 6 7 
2018-01-03 8 9 * 11

第三章 处理NaN数据

3.3 检查是否存在NaN数据

print df.isnull()

输出 

a b c d 

2018-01-01 False False False False 

2018-01-02 False True False False 

2018-01-03 False False True False

04

导入与导出

导入函数导出函数功能
read_csvto_csv
read_excelto_excel
read_sqlto_sql
read_jsonto_json
read_msgpackto_msgpack
read_htmlto_html
read_gbqto_gbq
read_statato_stata
read_sasto_sas
read_clipboardto_clipboard
read_pickleto_pickle

以下面这个test.txt为例:

A B 
Tom 21 
Joe 26 
Sam 55 
Kerry 27

忽略第一行,并设置列名分别为‘name’和‘age’

data = pd.read_csv('test.txt', sep=' ', skiprows=1, names=['name','age'])
print data

输出 
name age 
0 Tom 21 
1 Joe 26 
2 Sam 55 
3 Kerry 27

05

合并DataFrame

第五章 合并DataFrame

5.1 concat函数

df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['a', 'b', 'c', 'd'])
df3 = pd.DataFrame(np.ones((3, 4))*2, columns=['a', 'b', 'c', 'd'])
# ignore_index=True将重新对index排序
print pd.concat([df1, df2, df3], axis=0, ignore_index=True)

输出 

a b c d 

0 0.0 0.0 0.0 0.0 

1 0.0 0.0 0.0 0.0 

2 0.0 0.0 0.0 0.0 

3 1.0 1.0 1.0 1.0 

4 1.0 1.0 1.0 1.0 

5 1.0 1.0 1.0 1.0 

6 2.0 2.0 2.0 2.0 

7 2.0 2.0 2.0 2.0 

8 2.0 2.0 2.0 2.0

join参数用法

df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'], index=[1,2,3])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['b', 'c', 'd', 'e'], index=[2,3,4])
# join默认为'outer',不共有的列用NaN填充
print pd.concat([df1, df2], join='outer') 
# join='inner'只合并共有的列
print pd.concat([df1, df2], join='inner')

输出 1 

a b c d e 

1 0.0 0.0 0.0 0.0 NaN 

2 0.0 0.0 0.0 0.0 NaN 

3 0.0 0.0 0.0 0.0 NaN 

2 NaN 1.0 1.0 1.0 1.0 

3 NaN 1.0 1.0 1.0 1.0 

4 NaN 1.0 1.0 1.0 1.0 

输出 2 

b c d 

1 0.0 0.0 0.0 

2 0.0 0.0 0.0 

3 0.0 0.0 0.0 

2 1.0 1.0 1.0 

3 1.0 1.0 1.0 

4 1.0 1.0 1.0

join_axes参数用法

df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
# 按照df1的index进行合并
print pd.concat([df1, df2], axis=1, join_axes=[df1.index])

输出 

a b c d b c d e 

1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN 

2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 

3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0

第五章 合并DataFrame

5.2 append函数

append多个DataFrame

df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['a', 'b', 'c', 'd'])

print df1.append(df2, ignore_index=True)

输出 

a b c d 

0 0.0 0.0 0.0 0.0 

1 0.0 0.0 0.0 0.0 

2 0.0 0.0 0.0 0.0 

3 1.0 1.0 1.0 1.0 

4 1.0 1.0 1.0 1.0 

5 1.0 1.0 1.0 1.0

append一组数据

df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd'])
s = pd.Series([4, 4, 4, 4], index=['a', 'b', 'c', 'd'])

print df1.append(s, ignore_index=True)

输出 
a b c d 
0 0.0 0.0 0.0 0.0 
1 0.0 0.0 0.0 0.0 
2 0.0 0.0 0.0 0.0 
3 4.0 4.0 4.0 4.0

第五章 合并DataFrame

5.3 merge函数

基于某一列进行合并

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                   'KEY': ['K1', 'K2', 'K3']})
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3'],
                   'KEY': ['K1', 'K2', 'K3']})

print pd.merge(df1, df2, on='KEY')

输出 
A B KEY C D 
0 A1 B1 K1 C1 D1 
1 A2 B2 K2 C2 D2 
2 A3 B3 K3 C3 D3

基于某两列进行合并

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'KEY1': ['K1', 'K2', 'K0'],
                    'KEY2': ['K0', 'K1', 'K3']})
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3'],
                    'KEY1': ['K0', 'K2', 'K1'],
                    'KEY2': ['K1', 'K1', 'K0']})
# how:['left','right','outer','inner']
print pd.merge(df1, df2, on=['KEY1', 'KEY2'], how='inner')

输出 
A B KEY1 KEY2 C D 
0 A1 B1 K1 K0 C3 D3 
1 A2 B2 K2 K1 C2 D2

按index合并

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3']},
                   index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3']},
                   index=['K0', 'K1', 'K3'])

print pd.merge(df1, df2, left_index=True, right_index=True, how='outer')

输出 
A B C D 
K0 A1 B1 C1 D1 
K1 A2 B2 C2 D2 
K2 A3 B3 NaN NaN 
K3 NaN NaN C3 D3

为列加后缀

df_boys = pd.DataFrame({'id': ['1', '2', '3'],
                        'age': ['23', '25', '18']})
df_girls = pd.DataFrame({'id': ['1', '2', '3'],
                        'age': ['18', '18', '18']})

print pd.merge(df_boys, df_girls, on='id', suffixes=['_boys', '_girls'])

输出 
age_boys id age_girls 
0 23 1 18 
1 25 2 18 
2 18 3 18

06

绘图

引入相应模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

绘制Series

data = pd.Series(np.random.randn(1000))
data = data.cumsum()

data.plot()
plt.show()

--本文完--

周末就不发新的Python面试题了,把最近发的题目都整理下,大家可以选择性看看,总共有39道题!

1、谈谈对 Python 和其他语言的区别?

2、谈谈对 Python3 和 Python2 的区别?

3、Python 的特点和优点是什么?

4、说说Python解释器种类以及特点?

5、说说4种常用编码的区别?

6、说说Python面向对象三大特性?

7、说说Python中有几种数据类型?

8、说说Python中xrange和range的区别?

9、Python变量、函数、类的命名规则?

10、说说Python可变与不可变数据类型?

11、说说Python模块主要分哪三类?

12、列举Python中的标准异常类?

13、Python中深拷贝与浅拷贝的区别?

14、Python中迭代器和生成器的区别?

15、Python可迭代对象怎么获取迭代器?

16、你了解什么是 Python 之禅么?

17、说说Python字典以及基本操作?

18、说说Python有几种字符串格式化?

19、说说Python多线程与多进程的区别?

20、说说HTTP常见响应状态码?

21、Python 单、双引号、三引号区别?

22、说说Python中猴子补丁是什么?

23、说说Python中的垃圾回收机制?

24、Python中有几种交换两个变量的值?

25、说说Python中的6种位运算符?

26、说说Python中的类型转换有哪些?

27、Python中实现二分查找的2种方法?

28、说说Python中的lambda表达式?

29、说说Python中的反射是什么?

30、Python删除list重复元素有几种方法?

31、Python中__new__和__init__的区别?

32、说说Python中的help()和dir()函数?

33、说说Python中的GIL是什么?

34、说说提高Python运行效率的技巧?

35、说说对于Python装饰器的理解?

36、说说Python中的异常捕获?

37、Python的单例模式有几种实现方式?

38、Python中的魔法方法有哪些?

39、Python实现自省的方法有哪些?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值