数据分析学习日志(伍)——Python基础与分析实战

一、Python基础

Python3 教程 | 菜鸟教程 (runoob.com)

Python 教程 — Python 3.12.2 文档

二、pandas

1.模块、包

通俗来讲,一个python文件就是一个模块,由python文件集成的文件夹就是一个包,包中一定含有_init_.py文件

2.Series、DataFrame

(1)Series

import pandas as pd
s1 = pd.Series(['a', 'b', 'c'], name='test', index=['A', 'B', 'C'])
print(s1)

属性name:名字

属性index:索引标签

series是一维的,具有自动对齐功能

import pandas as pd
s1 = pd.Series([2, 4, 6], name='math', index=['A', 'B', 'C'])
s2 = pd.Series([8, 10, 12], name='english', index=['A', 'C', 'B'])
print(pd.concat([s1, s2], axis=1))

(2)DataFrame

上述例子中,将Series s1和s2拼接之后就形成了DateFrame

3.读取、导出

import pandas as pd

//更改数据类型的方法1
data = pd.read_excel(r'/*绝对路径*/name.xlsx', converters=['uid':str]/*以str存储uid数据)
data.info()//查看data的各行数据类型

//方法2
data['uid'] = data['uid'].astype(str)

//数据导出
data.to_excel('name.xlsx', index=False)
data.to_csv('name.csv', encoding='GB18030'/*编码形式*/)
data.to_csv('name.txt', sep='\t')

4.访问、筛选

(1)访问列

data['id', 'content', 'uid']

(2)访问行

data.iloc[1:6][['id', 'content', 'uid']]
data[['id', 'content', 'uid']].iloc[1:6]

(3)筛选

import pandas as pd
s1 = pd.Series([2, 4, 6], name='math', index=['A', 'B', 'C'])
s2 = pd.Series([8, 10, 12], name='english', index=['A', 'C', 'B'])
data = pd.concat([s1, s2], axis=1)
print(data['math'] >= 3)
print(data[data['math'] >= 3])

(4)数据去重

data.drop_duplicates(
    subset='uid'//以uid进行去重
    keep='first/last'//重复数据保留第一条信息或是最后一条
    inplace=True//以更改后的数据覆盖原数据
    )

5.轴、合并、连接

axis=1,axis='columns',行

axis=0,axis='index',列

pd.concat([data, data2], axis=0)

pd.merge(
    left,//以左表为主表
    right,
    how:'inner',
    on=None,
    left_on=None,
    right_on=None
    )

6.排序、匿名函数

data.sort_values(['uid', 'time'], ascending=[True, False])//以uid升序排序,再以time降序排序

//匿名函数
def add(x, y):
    return x + y
//用匿名函数复刻add()功能
add2 = lambda x, y: x + y

7.分组、聚合、转换

level_manager = user_level.groupby('level')
level_manager.count()
level_manager['字段'].聚合函数()
level_manager[['字段']].agg(['max', 'min'])//展示最大和最小的值
level_manager.agg({'字段1':['max', 'min'], '字段2':'min'})//展示字段1的最大值和最小值,以及字段2的最小值

level_manager[['字段']].agg(lambda x: print(x))

//展示字段1的最大值和最小值的差值
//方法一
def diff(x):
    return x.max() - x.min()
level_manager[['字段1']].agg(diff)
//方法二
level_manager[['字段1']].agg(lambda x: x.max() - x.min())

//转换
level_manager['字段1'].transform(func='sum')//类似于SQL的窗口函数,以字段1的分组求和

//组内排名
level_manager.groupby('字段1')['字段2'].rank(method='dense')//以字段1分组,再以字段2进行排名

8.字符串方法

(1)split

DataFrame['字段1'].str.split('_', expand=True)//将分割之后的值以dataframe类型存储

(2)contains

DataFrame[DataFrame['字段1'].str.contains('str1')].reset_index(drop=True)//筛选字段1中含有str1的数据

(3)replace

DataFrame['字段1'].str.replace('str1', 'str2')//将字段1中的str1替换成str2

 (4)extract

DataFrame['字段1'].str.extract('str1')//提取只包含str1的字段1数据

9.绘图

//折线图
DataFrame.groupby('字段1')['字段2'].sum().plot(kind='line', x='字段3', y='字段2')

//柱状图
DataFrame.groupby('字段1')['字段2'].sum().plot(kind='bar', x='字段3', y='字段2')

//水平柱状图
DataFrame.groupby('字段1')['字段2'].sum().plot(kind='barh', x='字段3', y='字段2')

//直方图
DataFrame['字段1'].plot(kind='hist')

//散点图
DataFrame.plot(kind='scatter', x='字段1', y='字段2')

//饼图
DataFrame.groupby('字段1')['字段2'].sum().plot(kind='pie')

10.map、apply、applymap

DataSeries['字段1'].map(lambda x: int(x))//将字段1中的数值类型转换成int
DataSeries['字段1'].apply(lambda x: int(x))//将字段1中的数值类型转换成int
//map和apply生成的结果一样,map可以接收函数处理规则或字典,apply只能函数,但提供的参数更丰富
DataSeries['字段1'].map({'str1': 'str2'})//将字段1中str1替换成str2,但是其余没有制定规则的值会重置成NaN

//在处理dataframe类型时,apply传递的数据类型是一个个Series,applymap传递的是一个个值,方向向下
def demo(x):
    formular = x['字段1'] + x['字段2']
    return formular
DataFrame.apply(demo, axis=1)

DataFrame.apply(demo, axis=1, args=(参数,))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值