pandas apply lambda_第1章 Pandas基础

c67811860f28a41a174f60de813d0673.png

第1章 Pandas基础

import pandas as pd import numpy as np

查看Pandas版本

pd.__version__

3463cda8e7b4e6b1ee4ccde63f0576a2.png

一、文件读取与写入

1. 读取

(a)csv格式

df = pd.read_csv('data/table.csv') df.head()

f6c94e5ff0110eaa1cb6ba34420c1e7d.png

(b)txt格式

df_txt = pd.read_table('data/table.txt') #可设置sep分隔符参数 df_txt.head()

ecd04acb3084a5144e7ea195e791649a.png

(c)xls或xlsx格式

#需要安装xlrd包 
df_excel = pd.read_excel('data/table.xlsx') df_excel.head()

2257c6011be947858b56af40ff4ae283.png

2. 写入

(a)csv格式

df.to_csv('data/new_table.csv') 
#df.to_csv('data/new_table.csv', index=False) #保存时除去行索引

(b)xls或xlsx格式

#需要安装openpyxl 
df.to_excel('data/new_table2.xlsx', sheet_name='Sheet1')

二、基本数据结构

1. Series

(a)创建一个Series

对于一个Series,其中最常用的属性为值(values),索引(index),名字(name),类型(dtype)

s = pd.Series(np.random.randn(5),index=['a','b','c','d','e'],name = '这是一个Series',dtype='float64')
s

7173506acfc37713c5e55c82b7cba720.png

(b)访问Series属性

s.values

a84ecccb97abec483fee5e3e57c467dc.png
s.name

c8595df42f8c67c814f6cb4263a1a6b9.png
s.index

a1f2d422f8fd3a9affadd5943758ae55.png

(c)取出某一个元素

将在第2章详细讨论索引的应用,这里先大致了解

s['a']

18f90776a25484250b4149088d1d702c.png

(d)调用方法

s.mean()

c4c2246fe8896b24c21ab1eb356eddb6.png

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

print([attr for attr in dir(s) if not attr.startswith('-')])

860e8516545094a6c9293657ff6737fa.png

2. DataFrame

(a)创建一个DataFrame

df = pd.DataFrame({'col1':list('abcde'),'col2':range(5,10),'col3':[1.3,2.5,3.6,4.6,5.8]}, index = list('一二三四五')) 
df

534670b16aeb7cc296afb58eb8ec6f32.png

(b)从DataFrame取出一列为Series

df['col1']

0f312bfec0a04a14f326170d946603b5.png
type(df)

1c92d74e062cb068a16c1d0a9c5f7446.png
type(df['col3'])

0e0701aa63bf6b72595d8126870a3d24.png

(c)修改行或列名

df.rename(index={'一':'one'},columns={'col1':'new_col1'})

a3ad2ed79f06f14a83faef348d0ef1a6.png

(d)调用属性和方法

df.index

cf090af7cc4d426a34a4e5e0f749af34.png
df.columns

4ee556af13b3e9009680c3d1bc38d99e.png
df.values

4c1b9176d83c6bb94117799ccb08279f.png
df.shape

9b3d4cb16e8f30fc2881055079ef3ef6.png
df.mean()

13c84334d2663dd8f84eda834d0ffa0b.png

(e)索引对齐特性

这是Pandas中非常强大的特性,不理解这一特性有时就会造成一些麻烦

df1 = pd.DataFrame({'A':[1,2,3]},index=[1,2,3]) df2 = pd.DataFrame({'A':[1,2,3]},index=[3,1,2]) 
df1 - df2

d79b63653c694ec5990fb9d523e2623d.png

(f)列的删除与添加

对于删除而言,可以使用drop函数或del或pop

df.drop(index='五',columns='col1')#设置inplace=True后会直接在原DataFrame中改动

a3e1706a0159917707510065b07ce285.png
df['col1']=[1,2,3,4,5] del df['col1'] 
df

b9a4d569c2753b985c6a6d155c81a5bd.png

pop方法直接在原来的DataFrame上操作,且返回被删除的列,与python中的pop函数类似

df['col1']=[1,2,3,4,5] 
df.pop('col1')

d2653918473f59dc175d05d1c34ec344.png
df

a22eb8fff80ceac2a73c8e1390b5c7e4.png

可以直接增加新的列,也可以使用assign方法

df1['B']=list('abc') 
df1.assign(C=pd.Series(list('def')))

2029e4da253c18e7d61089be2c562c71.png

但assign方法不会对原DataFrame做修改

df1

e5167caa217ecf8f318d37207dcac978.png

(g)根据类型选择列

df.select_dtypes(include=['number']).head()

f865eb30a554cb2095cbdbbc3a307202.png
df.select_dtypes(include=['float']).head()

6d9b9469133b259b170c962b2572523b.png

(h)将Series转换为DataFrame

s = df.mean() s.name='to_DataFrame' 
s

a0afcc6ec55c5b83a78bceb3ca754ef8.png
s.to_frame()

b3f165e2722975d35968ccbffcca994f.png

使用T符号可以转置

s.to_frame().T

6ca518b2a2e9e6ed013554de78466ebd.png

三、常用基本函数

从下面开始,包括后面所有章节,我们都会用到这份虚拟的数据集

df = pd.read_csv('data/table.csv')

1. head和tail

df.head()

dda093e74e4225d64534fdc7bc156b16.png
df.tail()

8d453f0ccf25e7868f9e8adebbb975c1.png

可以指定n参数显示多少行

df.head(3)

55624a46d3cbc1e4d349b3b6df32c7cf.png

2. unique和nunique

df['Physics'].nunique()

54932b6643197d9ae3a488193f4eb11b.png

unique显示所有的唯一值

df['Physics'].unique()

db06f3aa8e18de26822e408e4b037659.png

3. count和value_counts

count返回非缺失值元素个数

df['Physics'].count()

7da5b3da788aaf0206380f33a8578f48.png

value_counts返回每个元素有多少个

df['Physics'].value_counts()

69ed87185dbf2466ce17e9ae28981bfe.png

4. describe和info

info函数返回有哪些列、有多少非缺失值、每列的类型

df.info()

96b05b8a5d175f03addc2355a650e84a.png

describe默认统计数值型数据的各个统计量

df.describe()

692593645f727939ecb026a323886053.png

可以自行选择分位数

df.describe(percentiles=[.05, .25, .75, .95])

ab769f0961dc38b86aeff8d4592a60d1.png

对于非数值型也可以用describe函数

df['Physics'].describe()

6b3d29a4afcd902c5368d27178ecd265.png

5. idxmax和nlargest

idxmax函数返回最大值,在某些情况下特别适用,idxmin功能类似

df['Math'].idxmax()

1158aadb597e0527ee519647c1e8d59c.png

nlargest函数返回前几个大的元素值,nsmallest功能类似

df['Math'].nlargest(3)

e526405e18ad9555065ba30126d81f2a.png

6. clip和replace

clip和replace是两类替换函数

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

df['Math'].head()

98a4cc6db07cc9f8d7df85bd788a74d0.png
df['Math'].clip(33,80).head()

a8d7d01062efbb09bdc186bf9ee9eff1.png
df['Math'].mad()

ca9008237eb53544a92782e114e7eb71.png

replace是对某些值进行替换

df['Address'].head()

93f66a379bfb1a239782aa0e22be68ee.png
df['Address'].replace(['street_1','street_2'],['one','two']).head()

c490163cfe05ec0259e444432eb3e0da.png

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

df.replace({'Address':{'street_1':'one','street_2':'two'}}).head()

cb628cbf8900b3927121a02704699b57.png

7. apply函数

apply是一个自由度很高的函数,在第3章我们还要提到

对于Series,它可以迭代每一列的值操作:

df['Math'].apply(lambda x:str(x)+'!').head() #可以使用lambda表达式,也可以使用函数

0e2e029cd6572c14dc339e4ad371ca92.png

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

df.apply(lambda x:x.apply(lambda x:str(x)+'!')).head() #这是一个稍显复杂的例子,有利于理解apply的功能

a9b33dfefbe435388e505072d7cfd2de.png

四、排序

1. 索引排序

df.set_index('Math').head() #set_index函数可以设置索引,将在下一章详细介绍

9dd64a61bc9d9873bc5ba0d60dda833f.png
df.set_index('Math').sort_index().head() #可以设置ascending参数,默认为升序,True

a459ac6bb0b70927cae03add5a392f05.png

2. 值排序

df.sort_values(by='Class').head()

effdef22176ac69845a6de40a62b58fe.png

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

df.sort_values(by=['Address','Height']).head()

b4cd9e7328fdff61c8287e1134bc9fde.png

代码和数据地址:https://github.com/XiangLinPro/pandas.git

所有巧合的是要么是上天注定要么是一个人偷偷的在努力。

个人微信公众号,专注于学习资源、笔记分享,欢迎关注。我们一起成长,一起学习。一直纯真着,善良着,温情地热爱生活,,如果觉得有点用的话,请不要吝啬你手中点赞的权力,谢谢我亲爱的读者朋友

3ab0caa3462b9dd2ab2ea2247bacca2c.png

-Fear not that the life shall come to an end, but rather fear that it shall never have a beginning.——J.H. Newman「不要害怕你的生活将要结束,应该担心你的生活永远不会真正开始。——纽曼」

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值