Pandas相关知识点

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

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

%config InlineBackend.figure_format = 'svg'

import warnings

warnings.filterwarnings('ignore')
df = pd.read_csv('data/2018年北京积分落户数据.csv', index_col='id')
df.info()
df.company.replace('北京华为数字技术有限公司', '华为技术有限公司北京研究所', inplace=True)
df.company.value_counts()[:20]
ser = df.company.replace('.*?华为(?!海洋网络).*', '华为技术有限公司北京研究所', regex=True)
ser.value_counts()[:20]

在这里插入图片描述

kobe_df = pd.read_csv('data/kobe_data.csv')
kobe_df.info()
pd.set_option('max_columns', None)
kobe_df.head()
# 1.科比使用得最多的投篮动作。
ser = kobe_df.action_type + '-' + kobe_df.combined_shot_type
ser.value_counts().index[0]

在这里插入图片描述

# 2.科比职业生涯交手最多的队伍是哪支球队。
kobe_df.drop_duplicates('game_id').opponent.value_counts().index[0]

在这里插入图片描述

# 3.科比职业生涯总得分。
# temp = kobe_df.dropna()
# temp = temp.query('shot_made_flag == 1')
# temp.shot_type.map(lambda x: int(x[0])).sum()
temp = kobe_df.dropna()[kobe_df.shot_made_flag == 1]
temp.shot_type.str.extract(r'(\d).*').applymap(int).sum()

在这里插入图片描述

video_df = pd.read_excel('data/某视频网站运营数据.xlsx')
video_df.info()
video_df.head()
# 根据views对数据排降序,根据video_id对数据进行去重 
temp = video_df.sort_values('likes', ascending=False).drop_duplicates('video_id')
temp
# 找出点赞数在100000次以上的视频ID、标题和赞数
temp.query('likes > 100000')[['video_id', 'title', 'likes']]

在这里插入图片描述

# 对上面的结果进行进行去重,并找出点赞数排前10名的视频信息
temp.nlargest(10, 'likes')
# 根据频道对数据分组,统计出每个频道播放数、赞数、踩数和评论数各自的总和
temp2 = temp.pivot_table(
    index='channel_title',
    values=['views', 'likes', 'dislikes', 'comment_count'],
    aggfunc='sum'
)
temp2

在这里插入图片描述

# 根据上面的结果找出热门频道("播放数+赞数+评论数”总和最高的前10名)
temp2['hot_value'] = temp2.views + temp2.likes + temp2.comment_count
temp2.nlargest(10, 'hot_value')['hot_value']

在这里插入图片描述

Pandas相关知识点

数据抽样

sample()方法。

import random

df = pd.read_excel(
    'data/2020年销售数据.xlsx',
    header=1,
    # skiprows=lambda row: row > 1 and random.random() < 0.9
)
df.info()
# 随机抽样200条数据
df.sample(n=200)

# 随机抽样10%的数据
df.sample(frac=0.1)

独热编码

数据表中的字符串字段通常需要做预处理,因为字符串字段没有办法计算相关性,也没有办法进行 χ 2 \chi^2 χ2检验、Gamma检验等操作,机器学习的算法。处理字符串通常有以下几种方式:

  1. 有序变量(Ordinal Variable):字符串表示的数据有大小关系,那么可以对字符串进行序号化处理。
  2. 分类变量(Categorical Variable)/ 名义变量(Nominal Variable):字符串表示的数据没有大小关系和等级之分,那么就可以使用独热编码处理成哑变量(虚拟变量)矩阵。
  3. 定距变量(Scale Variable):数据有大小高低之分,可以进行加减运算。

可以使用get_dummies()函数来生成哑变量(虚拟变量)矩阵,将哑变量引入回归模型,虽然使模型变得较为复杂,但可以更直观地反映出该自变量的不同属性对于因变量的影响。

df = pd.DataFrame(
    data={
        '姓名': ['关羽', '张飞', '赵云', '马超', '黄忠'],
        '职业': ['医生', '程序员', '分析师', '律师', '教师'],
        '学历': ['高中', '大专', '本科', '硕士', '博士']
    }
)
df
# 生成哑变量矩阵(独热编码)
temp = pd.get_dummies(df['职业'])
df[temp.columns] = temp
df.drop(columns='职业', inplace=True)
df
# 作业:将“学历”列替换成“定距变量”,不同学历的值请自行拟定

import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='school_1')
conn
student_df = pd.read_sql('select stu_id, stu_name from tb_student', conn)
student_df
course_df = pd.read_sql('select cou_id, cou_name from tb_course', conn)
course_df
record_df = pd.read_sql('select rec_id, stu_id, cou_id, score from tb_record where score is not null', conn)
record_df
# 合井表(how-连接表的方式,on- 基于哪个字段进行连表操作)
temp_df = pd.merge( student_df, record_df, how='inner', on='stu_id')
temp_df = pd.merge(temp_df, course_df, how='inner', on='cou_id')
temp_df.reindex(columns=['stu_name', 'cou_name', 'score'])

在这里插入图片描述

# 拼接表:表结构一致,数据来自于多张表,可以通过拼接操作实现数据的汇总
names = ['高新', '犀浦', '新津']
dfs = [pd.read_excel(f'data/小宝剑大药房({name}店)2018年销售数据.xlsx', header=1)
    for name in names]
pd.concat(dfs, ignore_index=True)

在这里插入图片描述

from sklearn.datasets import load_boston

dataset = load_boston()
dir(dataset)

在这里插入图片描述

df = pd.DataFrame(data=dataset.data, columns=dataset.feature_names)
df['PRICE'] = dataset.target
df
# 协方差
df.cov()
temp = df.corr()
temp = temp.drop(index='PRICE')
# highlight_max - 高亮最大值
# highlight_min - 高亮最小值
temp.style.highlight_max(
    subset=['PRICE'], 
    props='background: blue; color: white')

在这里插入图片描述

temp = df.corr()
temp = temp.drop(index='PRICE')
# background_gradient - 设置使用颜色阶梯
temp.style.background_gradient('Reds', subset=['PRICE']).to_excel('data/temp.xlsx')

在这里插入图片描述

其他方法

  1. rolling()方法
  2. expanding()方法
  3. ewm()方法
  4. explode()方法
  5. interpolate()方法
df = pd.DataFrame(np.arange(10).reshape(2,5),index=['time', 'food'])
df

在这里插入图片描述

haha = df.rolling(3, min_periods=1, axis=1).mean()
haha

在这里插入图片描述

df.rolling(3, axis=1).sum()

在这里插入图片描述

df.expanding(3, axis=1).mean()

在这里插入图片描述

df.ewm(com=0.5, axis=1).mean()

在这里插入图片描述

参数:

  • com:浮动,可选
    • 根据质心指定衰减,a = 1/(1 + com),为了com≥0.
  • 跨度:浮动,可选
    • 根据跨度指定衰减,a = 2/(span + 1),为了span≥1.
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
df

在这里插入图片描述

df.ewm(com=0.5).mean()

在这里插入图片描述

df = pd.DataFrame({'A': [[0, 1, 2], 'foo', [], [3, 4]],
                   'B': 1,
                   'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']]})
df

在这里插入图片描述

df.explode('A')

在这里插入图片描述

  • method参数:
    • linear:忽略索引并将值视为等距。这是 MultiIndexes 支持的唯一方法。

    • time:处理每日和更高分辨率的数据以插入 给定的间隔长度。

    • index, ‘values’:使用索引的实际数值。

    • pad:使用现有值填充 NaN。

    • “最近”、“零”、“线性”、“二次”、“三次”、“样条”、“重心”、“多项式”:传递给scipy。插值.interp1d。这些方法使用索引的数值。polynomialspline 都要求您还指定一个阶数(int),例如 .df.interpolate(method=‘polynomial’, order=5)

    • kroghpiecewise_polynomialsplinepchipakimacubicspline:围绕类似名称的 SciPy 插值方法的包装。见注释。

    • from_derivatives:指的是 scipy。插值.BPoly.from_derivatives替换 scipy 0.18 中的“piecewise_polynomial”插值方法。

s = pd.Series([0, 1, np.nan, 3])
s
s.interpolate()

在这里插入图片描述

s = pd.Series([np.nan, "single_one", np.nan,
               "fill_two_more", np.nan, np.nan, np.nan,
               4.71, np.nan])
s

在这里插入图片描述

s.interpolate(method='pad', limit=2)

在这里插入图片描述

s = pd.Series([0, 2, np.nan, 8])
s.interpolate(method='polynomial', order=2)

在这里插入图片描述

df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
                   (np.nan, 2.0, np.nan, np.nan),
                   (2.0, 3.0, np.nan, 9.0),
                   (np.nan, 4.0, -4.0, 16.0)],
                  columns=list('abcd'))
df

在这里插入图片描述

df.interpolate(method='linear', limit_direction='forward', axis=0)

在这里插入图片描述

df['d'].interpolate(method='polynomial', order=2)

在这里插入图片描述

# !pip install pandas-datareader
import pandas_datareader as pdr

# baba_df = pdr.get_data_yahoo('BABA', start='2021-1-1', end='2021-6-30')
baba_df = pd.read_excel('data/BABA.xlsx')
baba_df
baba_df.Close.rolling(10).mean()[:20]

在这里插入图片描述

baba_df.Close.expanding?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas的重点知识点主要包括以下几个方面: 1. Pandas与NumPy的关系:Pandas是基于NumPy实现的,它们互为补充。Pandas的核心数据结构与NumPy的ndarray相似,但Pandas在数据处理方面更强大和智能,而NumPy更基础和强大。 2. 数据分析中的Data Frame操作:Data Frame是Pandas中最常用的数据结构,类似于Excel中的表格。对Data Frame进行各种操作是进行数据分析的基础操作,比如数据筛选、排序、切片等。 3. 分组聚合:利用Pandas进行数据分析时,经常需要根据某些特征将数据分组,并对每个分组进行聚合计算,如求和、计数、均值等。这种分组聚合操作可以帮助我们快速统计和分析数据。 4. Series:Series是Pandas中的一维数据结构,类似于Excel中的列。它由一组数据和与之关联的索引组成,可以对数据进行标签化的访问和操作。 总结来说,Pandas的重点知识点包括Pandas与NumPy的关系、Data Frame的操作、分组聚合以及Series的使用。掌握这些知识点可以帮助你更好地进行数据分析和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Pandas知识点超全总结](https://blog.csdn.net/Itsme_MrJJ/article/details/126101002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值