专栏首页洞明学问Python 数据分析初阶

Python 数据分析初阶

某一列数据计算

data['column_name'].value_counts()

以之前找到的一个前辈的数据为例子,首先我们要获取文件

import pandas as pd
data = pd.read_excel('xxxx.xls')

这里可以单独查看其中的内容 data['nick'],计算其中的大小则使用 data['nick'].value_counts()

同样的情况,我们可以增加分组并获取对应的数据

data1 = data['score'].groupby(data['city']) data1.mean()

这种情况下可以类比为SQL语句:

select avg(score) from data group by city

这样的数据看起来不是特别让人喜欢,这个时间我们可以给他排个序:

data1.mean().sort_values(ascending=False)

现在看起来好多了,但是有点多了,我们只想看前几条记录:

data1.mean().sort_values(ascending=False).head(3)

可惜了,好多城市我都没听过,我只想看直辖市的数据

data2 = data.loc[(data['city'].isin(['北京','天津','重庆','上海']))]

但是这样还是不特别好看,我们可以再按城市看一下,评分有多少

data2['score'].groupby(data2['city']).mean()

数据表信息查看

df.shape: 维度查看 df.info(): 数据表基本信息,包括围度、列名、数据格式、所占空间 df.dtypes: 每一列的数据格式 df['b'].dtype: 某一列的格式 df.isnull(): 是否空值 df.['b'].unique(): 查看某一列的唯一值 df.values: 查看数据表的值 df.columns: 查看列名 df.head(): 查看默认的前 10 行数据 df.tail(): 查看默认的后 10 行数据

数据表清洗

df.fillna(value=0): 用数字 0 填充空值 df['pr'].fillna(df['pr'].mean()): 用列 pr 的平均值对 na 进行填充 df['city']=df['city'].map(str.strip): 清除 city 字段的字符空格 df['city']=df['city'].str.lower(): 大小写转换 df['pr'].astype('int'): 更改数据的格式 df.rename(columns={'category': 'category-size'}): 更改列名 df['city'].drop_duplicates(): 删除后出现的重复值 df['city'].drop_duplicates(keep='last'): 删除先出现的重复值 df['city'].replace('sh', 'shanghai'): 数据替换

数据预处理

  • 数据表合并
df_inner = pd.merge(df, df1, how='inner')  # 匹配合并,交集
df_left = pd.merge(df, df1, how='left')  # 左联表
df_right = pd.merge(df, df1, how='right')  # 右联表
df_outer = pd.merge(df, df1, how='outer')  # 并集
  • 设置索引列
df.set_index('id')
  • 按照特定列的值排序
df.sort_values(by=['age'])
  • 按照索引列排序
df.sort_index()
  • 如果 pr 列的值大于 3000 , group 列显示 hight , 否则显示 low
df['group'] = np.where(df['pr'] > 3000, 'hight', 'low')
  • 对复合多个条件的数据进行分级标记
df.loc[(df['city'] == 'beijing') & (df['pr'] >= 4000), 'sign'] = 1
  • 对 category 字段的值依次进行分列,并创建数据表,索引值 df 的索引列,列名称为 category 和 size
pd.DataFrame((x.split('-')
              for x in df['category']), index=df.index, columns=['category', 'size'])

数据提取

loc: 函数按标签值进行提取 iloc: 按位置进行提取 ix: 可以同时按标签和位置进行提取

具体的使用见下:

df.loc[3]: 按索引提取单行的数值 df.iloc[0:5]: 按索引提取区域行数据值 df.reset_index(): 重设索引 df=df.set_index('date'): 设置 date 为索引 df[:'2013']: 提取 2013 之前的所有数据 df.iloc[:3,:2]: 从 0 位置开始,前三行,前两列,这里的数据不同去是索引的标签名称,而是数据所有的位置 df.iloc[[0,2,5],[4,5]]: 提取第 0、2、5 行,第 4、5 列的数据 df.ix[:'2013',:4]: 提取 2013 之前,前四列数据 df['city'].isin(['beijing']): 判断 city 的值是否为北京 df.loc[df['city'].isin(['beijing','shanghai'])]: 判断 city 列里是否包含 beijing 和 shanghai ,然后将符合条件的数据提取出来 pd.DataFrame(category.str[:3]): 提取前三个字符,并生成数据表

数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。

  • 使用与进行筛选
df.loc[(df['age'] > 25) & (df['city'] == 'beijing'),
       ['id', 'city', 'age', 'category']]
  • 使用或进行筛选
df.loc[(df['age'] > 25) | (df['city'] == 'beijing'), ['id', 'city', 'age']]
  • 使用非进行筛选
df.loc[(df['city'] != 'beijing'), ['id', 'city', 'age']].sort(['id'])
  • 筛选后的灵气按 city 列进行计数
df.loc[(df['city'] != 'beijing'), ['id', 'city', 'age']].sort(
    ['id']).city.count()
  • 使用 query 函数进行筛选
df.query('city' == ['beijing', 'shanghai'])
  • 对筛选后的结果按 pr 进行求和
df.query('city' == ['beijing', 'shanghai']).pr.sum()

数据汇总

主要使用 groupby 和 pivote_table 进行处理。

df.groupby('city').count(): 按 city 列分组后进行数据汇总 df.groupby('city')['id'].count(): 按 city 进行分组,然后汇总 id 列的数据 df.groupby(['city','size'])['id'].count(): 对两个字段进行分组汇总,然后进行计算 df.groupby('city')['pr'].agg([len, np.sum,np.mean]): 对 city 进行分组,然后计算 pr 列的大小、总和和平均数

数据统计

数据采样,计算标准差、协方差和相关系数。

  • 简单数据采样
df.sample(n=3)
  • 手动设置采样权重
weights = [0, 0, 0, 0, 0, 0.5, 0.5]
df.sample(n=2, weights=weights)
  • 采样后不放回
df.sample(n=6, replace=False) # 如果 replace = True 采样后放回
  • 数据表描述性统计
df.describe().round(2).T  # round 表示显示的小数位数,T 表示转置
  • 计算列的标准差
df['pr'].std()
  • 计算两个字段间的协方差
df['pr'].cov(df['m-point'])
  • 计算表中所有字段间的协方差
df.cov()
  • 两个字段间的相关性分析
df['pr'].corr(df['m-point'])  # 相关系数在 [-1, 1] 之间,接近 -1 为负相关,1 为正相关,0 为不相关
  • 数据表的相关性分析
df.corr()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用 Pandas 进行数据处理系列 二

    获取行操作df.loc[3:6]获取列操作df['rowname']取两列df[['a_name','bname']] ,里面需要是一个 list 不然会报错增...

    zucchiniy
  • select into 和 insert int select

    zucchiniy
  • Python 学习路径

    现在 Python 主要在 前端 、 数据分析 两个方面比较火,相较于其它语言,更灵活,经过一段时间的选择之后,希望可以认真的学习 Python 这门编程语言。

    zucchiniy
  • Pandas入门操作

    俺也想起舞
  • Python中字段抽取、字段拆分、记录抽取

    1、字段抽取 字段抽取是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:slice(start,stop) 注意:和数据结构的访问方式一样,开始位置...

    Erin
  • 快速介绍Python数据分析库pandas的基础知识和代码示例

    “软件工程师阅读教科书作为参考时不会记住所有的东西,但是要知道如何快速查找重·要的知识点。”

    deephub
  • 【MathorCup】2020年 A题 无车承运人平台线路定价问题,特征间的相关性分析

    问题 1:通过定量分析的方法,研究影响无车承运人平台进行货运线路定价的主要因素有哪些,并说明理由。 问题 2:根据附件 1 数据,通过建立数学模型,对已经成交...

    不太灵光的程序员
  • Pandas进阶修炼120题,给你深度和广度的船新体验

    本文为你介绍Pandas基础、Pandas数据处理、金融数据处理等方面的一些习题。

    数据派THU
  • Day05| 第四期-电商数据分析

    疫情期间,想必我们会增加网上购物,人们的生活越来越数字化。当我们消费时,无论是线上和线下都会产生大量的交易数据,对于商家来说数字化的运营方式非常必要,从大量的交...

    DataScience
  • Pandas 数据分析: 3 种方法实现一个实用小功能

    与时间相关,自然第一感觉便是转化为datetime格式,这里需要注意:需要首先将两列转化为 str 类型。

    double

扫码关注云+社区

领取腾讯云代金券