数据分析----Pandas常用命令整理

在这里插入图片描述


前言

最近在学习一些数据挖掘方面的内容,发现涉及到csv文件处理的必定是离不开Pandas命令的,而且Pandas的强大远远超出我的认知,相比于自己写一些功能代码,使用Pandas 命令处理起来要更加方便、快速,代码也更加简洁。下面整理一些常用的到的Pandas命令。
文中代码建议在 jupyter notebook 中运行


一、基本命令

以下面这个作为要处理的例子:

data=pd.DataFrame({
    
    
    "name":['Bob','Mike','James','John','Neix','Amy','Sera','Lee','Jay','Claso','Bio','David'],
    "area":['A','A','B','C','C','C','B','A','C','C','A','B'],
    "age":[24, 23, 16, 22, 34, 11, 23, 28, 26, 41, 25, 42],
    "weight":[54, 55, 51, 59, 50, 56, 56, 55, 66, 76, 69, 54]
    
})

在这里插入图片描述

1、基础命令

令data是读取csv文件后的DataFrame
data.head(n)————————显示前n行数据
data.tail(n)————————显示后n行数据

data1 = data.set_index("xxx")————————将xxx列设置为索引

data.infoo()————————获取 dataFrame 的大致信息(有无缺失值、占用内存等)
data.describe()————————获取基本的统计值信息(最大值/最小值、方差等)

2、进阶命令

2.1 Groupby() :根据一个或多个列中的值对数据进行分组,然后对每个组执行聚合操作

2.1.1 配合 sum()/mean()操作

按照地区分类求年龄总和(平均值:.mean())

在这里插入图片描述

最终显示时发现索引列不在同一行上,可以使用.reset_index()解决。

在这里插入图片描述

2.1.2 配合 agg() 操作——更常用

用法:grouped_data = data.groupby('分组列').agg(操作函数)
在这里插入图片描述

按照地区分类求年龄和体重平均值

在这里插入图片描述

按照地区分类只求体重的最大值

在这里插入图片描述

如果想针对不同的列采取不同处理,可以使用字典指定相应的操作

例如:按照地区分类,求年龄的均值和体重的最大值

在这里插入图片描述

2.1.3 配合 apply() 操作——更灵活

apply能够传入自定义函数,实现更复杂的操作(agg也可以)

按照地区分类,求年龄和体重的平均值,保留1位小数
def avg(row):
    return round(row.mean(), 1)
c = data.groupby('area').apply(avg)
c

在这里插入图片描述

2.2 map():映射操作

2.2.1 使用字典映射

将area的大写字母换成小写字母

在这里插入图片描述

2.2.1 使用函数映射

在这里插入图片描述

2.3 筛选操作

2.3.1 常规筛选命令

筛选出年龄大于30且体重大于60的所有数据

在这里插入图片描述
注意:在 Pandas 中,使用 & 符号代替 and,使用 | 符号代替 or,否则会报错。

2.3.2 loc和iloc命令—类似列表切片

loc:使用标签索引进行筛选
iloc:使用位置索引进行筛选

# 通过单个标签选择一行数据
# 下面两个代码结果相同,但是要注意1的含义不同
data.loc[1]        # 行标签为1
data.iloc[1]   	   # 1代表第二行
'''
name      Mike
area         A
age         23
weight      55
Name: 1, dtype: object
'''

# 通过标签列表选择多行数据
data.loc[[1,3]]
data.iloc[[1,3]]
'''
    name	area	age   weight
1	Mike	  A	     23	   55
3	John	  C	     22	   59
'''

# 通过标签范围选择多行数据
data.loc[1:3]    #左闭右闭
data.iloc[1:4]   # 左闭右开
'''
    name	area	age	  weight
1	Mike	  A	     23	   55
2	James	  B	     16	   51
3	John	  C	     22	   59
''' 

# 通过列标签进行筛选
data.loc[:,'name']
'''
0       Bob
1      Mike
2     James
3      John
4      Neix
5       Amy
6      Sera
7       Lee
8       Jay
9     Claso
10      Bio
11    David
Name: name, dtype: object
'''

2.3.3 str.contains用法:Series中用于查找子字符串

用法:

s.str.contains(pat, case=True, flags=0, na=nan)  #s为 series

pat: 要查找的子字符串,可以是正则表达式。
case: 是否区分大小写,默认为 True。
flags: 用于控制正则表达式的行为。
na: 当某个元素为缺失值(NaN)时,返回什么值,默认为 NaN

将姓名首字母A到G的数据筛选出来

在这里插入图片描述

3、日期(时间)处理

添加一列随机的日期数据:

data['date'] = pd.Series(['2015/08/06','2015/04/19','2016/11/11','2015/01/30','2016/09/01',
                          '2015/02/02','2016/07/16','2016/03/19','2016/06/10','2015/12/15',
                          '2016/10/27','2016/05/22'])

将数据类型转换为标准日期类型

data['date'] = pd.to_datetime(data['date'])

在这里插入图片描述

3.1基本命令

3.1.1 将所有数据按时间顺序排列

data.sort_values(by='date',ascending=True,inplace=False)

ascending:Ture为升序,False为降序

在这里插入图片描述

3.1.2 筛选某一时间段的数据——truncate方法

truncate:用于按照给定的开始和结束时间戳截断时间序列型数据。它可以用于索引为 DatetimeIndex 的 DataFrame 或 Series 对象中,但是在使用之前需要确保索引已经按照时间序列排序

用法:

DataFrame.truncate(before=None, after=None, axis=None, copy=True)

或者

Series.truncate(before=None, after=None, copy=True)

before: 提取开始时间,类型为字符串或者时间戳。
after: 提取结束时间,类型为字符串或者时间戳。
axis: 可选参数,如果是 DataFrame,可以指定 0 行轴或 1 列轴,默认为 0。
copy: 如果为 True, 返回新的 DataFrame 或 Series 或者视图;如果为 False, 返回原始的 DataFrame 或 Series 或者视图(如果没有复制),默认为 True。

筛选得到2015年年初到年中的所有数据
# 将date列设置为索引
df = data.set_index("date")
# 对索引按照时间顺序排序
df.sort_values(by='date',ascending=True,inplace=True)

# 提取 2015-01-01 到 2015-06-30 之间的数据
start_date = "2015-01-01"
end_date = "2015-06-30"
df_1 = df.truncate(before=start_date, after=end_date)
df_1.reset_index()

在这里插入图片描述

3.2 季节处理

3.1.1 按阴历划分

1—3月
4—6月
7—9月
10—12月

代码(效果:新增一列,获取每个日期对应的季节):

# 使用dt.month属性获取每个日期的月份信息
months = data['date'].dt.month

# 根据月份信息生成季节信息
seasons = ((months + 2) // 3).map({
    
    1: '春', 2: '夏', 3: '秋', 4: '冬'})

# 将季节信息添加到DataFrame中
data['season'] = seasons

在这里插入图片描述

3.1.1 按阳历划分

3—5月
6—8月
9—11月
12—次年2月

将上面的seasons改为:

seasons = ((months % 12 + 3) // 3).map({
    
    1: '冬', 2: '春', 3: '夏', 4: '秋'})

在这里插入图片描述

总结

本文后续会长期更新,作为一份简单速查的Pandas笔记,方便快速处理一些简单的数据分析问题。

猜你喜欢

转载自blog.csdn.net/m0_46366547/article/details/130467664