pandas入门笔记

pandas备忘录,速查指南

import pandas as pd
import numpy as np

创建测试对象

df=pd.DataFrame(np.random.rand(8,5))#创建一个DataFrame
df
s=pd.Series([1,2,3,4,5,4,3,3])#创建一个Series
s
0 1 1 2 2 3 3 4 4 5 5 4 6 3 7 3 dtype: int64
df.index=pd.date_range('2017/7/7',periods=df.shape[0])#修改默认行索引,以日期为索引
df
01234
2017-07-070.0129900.2221290.0066200.1599680.793618
2017-07-080.0372720.9221430.9837030.7005870.635600
2017-07-090.6664900.5809490.3442860.9835800.191135
2017-07-100.7533930.7401030.8481950.4259480.804801
2017-07-110.0988320.8859190.7589910.3950710.486679
2017-07-120.2141620.9876580.8086050.8363700.169363
2017-07-130.8501170.0640440.3527110.3309940.837915
2017-07-140.7310370.7050150.0901900.1066670.695663

浏览、检查数据

df.head(4)#查看前四行
01234
2017-07-070.0129900.2221290.0066200.1599680.793618
2017-07-080.0372720.9221430.9837030.7005870.635600
2017-07-090.6664900.5809490.3442860.9835800.191135
2017-07-100.7533930.7401030.8481950.4259480.804801
df.tail(4)#查看后四行
01234
2017-07-110.0988320.8859190.7589910.3950710.486679
2017-07-120.2141620.9876580.8086050.8363700.169363
2017-07-130.8501170.0640440.3527110.3309940.837915
2017-07-140.7310370.7050150.0901900.1066670.695663
df.shape#查看行数和列数
(8, 5)
df.info()#显示行索引,数据类型,列数,存储等信息
df.describe()#显示统计信息,有个数,均值,标准差,最大最小值,中位数,四分之一和四分之三等分点
01234
count8.0000008.0000008.0000008.0000008.000000
mean0.4205360.6384950.5241630.4923980.576847
std0.3608140.3348790.3722830.3167150.269292
min0.0129900.0640440.0066200.1066670.169363
25%0.0834420.4912440.2807620.2882370.412793
50%0.4403260.7225590.5558510.4105100.665631
75%0.7366260.8949750.8185030.7345320.796414
max0.8501170.9876580.9837030.9835800.837915
s.value_counts(dropna=False)#对Series进行唯一值统计计数
3 3 4 2 5 1 2 1 1 1 dtype: int64
df.apply(pd.Series.value_counts)#对所有列运用pd.Series.value_counts方法进行个数统计
01234
0.006620NaNNaN1.0NaNNaN
0.0129901.0NaNNaNNaNNaN
0.0372721.0NaNNaNNaNNaN
0.064044NaN1.0NaNNaNNaN
0.090190NaNNaN1.0NaNNaN
0.0988321.0NaNNaNNaNNaN
0.106667NaNNaNNaN1.0NaN
0.159968NaNNaNNaN1.0NaN
0.169363NaNNaNNaNNaN1.0
0.191135NaNNaNNaNNaN1.0
0.2141621.0NaNNaNNaNNaN
0.222129NaN1.0NaNNaNNaN
0.330994NaNNaNNaN1.0NaN
0.344286NaNNaN1.0NaNNaN
0.352711NaNNaN1.0NaNNaN
0.395071NaNNaNNaN1.0NaN
0.425948NaNNaNNaN1.0NaN
0.486679NaNNaNNaNNaN1.0
0.580949NaN1.0NaNNaNNaN
0.635600NaNNaNNaNNaN1.0
0.6664901.0NaNNaNNaNNaN
0.695663NaNNaNNaNNaN1.0
0.700587NaNNaNNaN1.0NaN
0.705015NaN1.0NaNNaNNaN
0.7310371.0NaNNaNNaNNaN
0.740103NaN1.0NaNNaNNaN
0.7533931.0NaNNaNNaNNaN
0.758991NaNNaN1.0NaNNaN
0.793618NaNNaNNaNNaN1.0
0.804801NaNNaNNaNNaN1.0
0.808605NaNNaN1.0NaNNaN
0.836370NaNNaNNaN1.0NaN
0.837915NaNNaNNaNNaN1.0
0.848195NaNNaN1.0NaNNaN
0.8501171.0NaNNaNNaNNaN
0.885919NaN1.0NaNNaNNaN
0.922143NaN1.0NaNNaNNaN
0.983580NaNNaNNaN1.0NaN
0.983703NaNNaN1.0NaNNaN
0.987658NaN1.0NaNNaNNaN

选择数据

df[0]#返回DataFrame中的指定列,作为一个Series返回
2017-07-07 0.012990 2017-07-08 0.037272 2017-07-09 0.666490 2017-07-10 0.753393 2017-07-11 0.098832 2017-07-12 0.214162 2017-07-13 0.850117 2017-07-14 0.731037 Freq: D, Name: 0, dtype: float64
df[[2,4,3]]#将指定的列作为一个新的DataFrame对象返回
243
2017-07-070.0066200.7936180.159968
2017-07-080.9837030.6356000.700587
2017-07-090.3442860.1911350.983580
2017-07-100.8481950.8048010.425948
2017-07-110.7589910.4866790.395071
2017-07-120.8086050.1693630.836370
2017-07-130.3527110.8379150.330994
2017-07-140.0901900.6956630.106667
s
0 1 1 2 2 3 3 4 4 5 5 4 6 3 7 3 dtype: int64
s.iloc[2]#对Series按位置选择
3
s.loc[2]#对Series按索引选择
3
df.iloc[0,:]#选择DataFrame的第一行,以Series对象返回
0 0.012990 1 0.222129 2 0.006620 3 0.159968 4 0.793618 Name: 2017-07-07 00:00:00, dtype: float64
df.iloc[0,0]#选择DataFrame中的第一行的第一个元素,数据类型numpy.float64
0.012990160364784065

数据清洗

df=pd.DataFrame([[1,2,3,8,5],[6,7,np.NaN,8,9],[2,3,np.NaN,np.NaN,0],[3,4,5,6,7]])
df
01234
0123.08.05
167NaN8.09
223NaNNaN0
3345.06.07
df.columns=['a','b','c','d','e']#重命名列名
pd.isnull(df)#检查是否有null值,返回一个布尔值举止,null为True,这句也可写成df.isnull()形式
abcde
0FalseFalseFalseFalseFalse
1FalseFalseTrueFalseFalse
2FalseFalseTrueTrueFalse
3FalseFalseFalseFalseFalse
pd.notnull(df)#与pd.isnull方法相反
abcde
0TrueTrueTrueTrueTrue
1TrueTrueFalseTrueTrue
2TrueTrueFalseFalseTrue
3TrueTrueTrueTrueTrue
df.dropna()#丢弃所有包含null值的行
df.dropna(axis=1)#丢弃所有包含null值的列
abe
0125
1679
2230
3347
df.dropna(axis=1,thresh=3)#丢弃所有非null值个数少于3的列
abde
0128.05
1678.09
223NaN0
3346.07
df.fillna(x)#将所有的null值用x替换
s.fillna(s.mean())#将所有的null值用平均值代替,这里的平均值可以替换成任何统计函数
s.astype(float)#将数据类型转换为float
s.replace(1,'one')#将值为1的值替换为one
s.replace([1,3],['one','three'])#将所有的1替换为one,所有的3替换为three
df.columns=[1,2,3,4,5]
df
12345
0123.08.05
167NaN8.09
223NaNNaN0
3345.06.07
df.rename(columns=lambda x:x+1)#这个函数返回一个新的DataFrame对象,原来的df不变
23456
0123.08.05
167NaN8.09
223NaNNaN0
3345.06.07
df.rename(columns={'old_name':'new_name'})#选择性修改指定的列名
df.set_index(1)#重命名索引,以指定的列作为索引,返回一个新的DataFrame对象
2345
1
123.08.05
67NaN8.09
23NaNNaN0
345.06.07
df.rename(index=lambda x:x+1)#批量修改索引,返回一个新的DataFrame对象
12345
1123.08.05
267NaN8.09
323NaNNaN0
4345.06.07

过滤,排序,分组

df[df[5]>2]#返回列名为5的列中大于2的行
12345
0123.08.05
167NaN8.09
3345.06.07
df[(df[5]>5) &(df[2]>4)]#返回5列中大于5,并且2列中大于4的行
12345
167NaN8.09
df.sort_values(2)#以2列升序排列
12345
0123.08.05
223NaNNaN0
3345.06.07
167NaN8.09
df.sort_values(2,ascending=False)#以2列降序排列
12345
167NaN8.09
3345.06.07
223NaNNaN0
0123.08.05
df.sort_values([col1,col2],ascending=[True,False])#以col1升序,col2降序排列
df.groupby(1)#以1列分组,返回一个groupby对象
df.groupby([col1,col2])#返回一个多列分组的结果
df.groupby(col1)[col2].mean()#返回以col1分组后的col2列的平均值,这里mean()可以替换成其他统计函数
df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean)#创建一个数据透视表
df.groupby(col1).agg(np.mean)#Finds the average across all columns for every unique column 1 group
df.apply(np.mean)#对每一列应用平均值函数
1 3.000000 2 4.000000 3 4.000000 4 7.333333 5 5.250000 dtype: float64
df.apply(np.max,axis=1)#求每一行的最大值
0 8.0 1 9.0 2 3.0 3 7.0 dtype: float64

连接,结合

df1.append(df2)#将df2的行加加到df1后面,列数必须相等
df.concat([df1,df2],axis=1)#将列进行链接,行数必须相等
df1.join(df2,on=col1,how='inner')#有点类似SQL里的内链接,how值还有'left','right','outer','inner'

统计函数

df.describe()#总结统计,以列为单位
12345
count4.0000004.0000002.0000003.0000004.00000
mean3.0000004.0000004.0000007.3333335.25000
std2.1602472.1602471.4142141.1547013.86221
min1.0000002.0000003.0000006.0000000.00000
25%1.7500002.7500003.5000007.0000003.75000
50%2.5000003.5000004.0000008.0000006.00000
75%3.7500004.7500004.5000008.0000007.50000
max6.0000007.0000005.0000008.0000009.00000
df.mean()#均值
1 3.000000 2 4.000000 3 4.000000 4 7.333333 5 5.250000 dtype: float64
df.corr()#返回列与列之间的相关度矩阵
12345
11.0000001.0000001.00.1147080.679185
21.0000001.0000001.00.1147080.679185
31.0000001.0000001.0-1.0000001.000000
40.1147080.114708-1.01.0000000.000000
50.6791850.6791851.00.0000001.000000
df.count()#返回每列的非空值数
1    4
2    4
3    2
4    3
5    4
dtype: int64
df.max()
1    6.0
2    7.0
3    5.0
4    8.0
5    9.0
dtype: float64
df.min()
1    1.0
2    2.0
3    3.0
4    6.0
5    0.0
dtype: float64
df.median()#返回中位数
1    2.5
2    3.5
3    4.0
4    8.0
5    6.0
dtype: float64
df.std()
1    2.160247
2    2.160247
3    1.414214
4    1.154701
5    3.862210
dtype: float64
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴你对Python的学习感兴趣!下面是一些关于黑马Python快速入门笔记: 1. Python简介:Python是一种高级编程语言,具有简洁、易读和可扩展的特点。它被广泛应用于数据分析、Web开发、人工智能等领域。 2. 安装Python:可以从Python官方网站下载并安装Python解释器。同时,推荐使用Anaconda发行版,它包含了很多常用的第三方库和工具。 3. 变量与数据类型:在Python中,可以使用变量来存储不同类型的数据。常见的数据类型包括整数、浮点数、字符串、列表、元组、字典等。 4. 控制流程:使用条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)控制程序的流程。 5. 函数与模块:函数是一段可重复使用的代码块,可以提高代码的复用性。模块是一个包含Python代码的文件,可以使用import语句导入模块并调用其中的函数。 6. 文件操作:Python提供了丰富的文件操作方法,可以读取和写入文本文件、二进制文件等。 7. 异常处理:通过异常处理机制可以捕获和处理程序中出现的错误,保证程序的稳定性。 8. 面向对象编程:Python是一种面向对象的编程语言,支持类、对象、继承等特性。面向对象编程可以更好地组织和管理代码。 9. 常用第三方库:Python拥有众多的第三方库,可以大大扩展其功能。一些常用的库包括NumPy(数值计算)、Pandas数据分析)、Matplotlib(数据可视化)等。 以上是关于黑马Python快速入门的一些笔记,希望对你的学习有所帮助。如果有任何问题,请随时向我提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值