ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据分析入门——Pandas的常用操作

2021-01-21 20:34:09  阅读:276  来源: 互联网

标签:数据分析 入门 Chinese df DataFrame df2 str Pandas columns


参考链接

  1. https://zhuanlan.zhihu.com/p/85967505

为什么使用Pandas

  1. Pandas提供的基础数据结构DataFrame与json的契合度很高;
  2. 语言简洁、功能强大。

Series和DataFrame是Pandas的两个核心数据结构,分别代表一维的序列和二维的表结构。

Series

Series是个定长的字典序列,因为在存储的时候,相当于两个ndarray。

Series有两个基本属性:index和values。

index默认是递增的整数序列:0,1,2,…。也可以自定义索引,如index=[‘a’,‘b’, …]。

import pandas as pd
from pandas import Series

x1 = Series([1, 2, 3, 4])
x2 = Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(x1)
print(x2)

也可以采用字典的方式创建Series。

d = {'a':1, 'b':2, 'c':3, 'd':4}
x3 = Series(d)
print(x3)

DataFrame

DataFrame类似于数据库表,包含了行索引和列索引。下面是一个成绩统计的例子。

data = {'Chinese': [60, 70, 80, 90, 100], 'English': [65, 75, 85, 95, 100], 'Math': [50, 60, 70, 80, 90]}
df1 = DataFrame(data)
df2 = DataFrame(data, index=['张三', '李四', '王五', '赵六', '朱七'])

print(df1)
print(df2)

数据导入和输出

从xlsx、csv等文件中导入数据

score = DataFrame(pd.read_excel('data.xlsx'))

输出到xlsx、csv等文件

score.to_excel('data1.xlsx')

数据清洗

以上面构建的数据为例。

删除DataFrame中不必要的行或列

使用drop(),如:

  1. 删除“Chinese”这一列
df2 = df2.drop(columns=['Chinese'])
  1. 删除“李四”这一行
df2 = df2.drop(index=['李四'])

重命名列名columns

使用rename(columns=new_names, inplace=True)函数,如将列名全换成中文

df2.rename(columns={'Chinese': '语文', 'English': '英语', 'Math': '数学'}, inplace=True)

去重复的行

df = df.drop_duplicates()

更改数据格式

使用astype函数来规范数据格式,比如“Chinese”字段的值改成str类型或int64类型:

df2['Chinese'] = df2['Chinese'].astype('str')
df2['Chinese'] = df2['Chinese'].astype(np.int64)

删除数据中的空格

使用strip()函数

  1. 删除左右两边空格
df2['Chinese'] = df2['Chinese'].str.strip()
  1. 删除左边的空格
df2['Chinese'] = df2['Chinese'].str.lstrip()
  1. 删除右边的空格
df2['Chinese'] = df2['Chinese'].str.rstrip()
  1. 删除某个符号
df2['Chinese'] = df2['Chinese'].str.strip('$')

大小写转换

  1. 全部大写
df2.columns = df2.columns.str.upper()
  1. 全部小写
df2.columns = df2.columns.str.lower()
  1. 首字母大写
df2.columns = df2.columns.str.title()

查找空值

有些字段存在空值NaN,需要使用isnull()函数进行查找

  1. 查看哪些地方存在空值,可以针对数据表使用isnull()
df.isnull()
  1. 查看哪列存在空值
df.isnull().any()
  1. 查看哪行存在空值
df.isnull().T.any()

使用apply函数

  1. 对列数值都进行大写转化
df2['Chinese'] = df2['Chinese'].apply(str.upper)
  1. 自定义apply函数,实现将数值*2后返回
def double_df(x):
    return 2*x
df2['Chinese'] = df2['Chinese'].apply(double_df)
  1. 自定义apply函数,实现新增两列数据
def plus(df, n, m):
    df['new1'] = (df['Chinese'] + df['Math']) * m
    df['new2'] = (df['Chinese'] + df['Math']) * n
    return df

df2 = df2.apply(plus, axis=1, args=(2, 3,))

数据统计

  1. 统计个数,空值NaN不计算:count()
  2. 一次性输出多个统计指标,包括:count,mean,std,min,max等 推荐
df2.describe()
  1. 最小值:min()
  2. 最大值:max()
  3. 总和:sum()
  4. 平均值:mean()
  5. 中位数:median()
  6. 方差:var()
df2.var()
  1. 标准差:std()
df2.std()
  1. 统计最小值的索引位置:argmin()
df2['Chinese'].argmin()
  1. 统计最大值的索引位置:argmax()
df2['Chinese'].argmax()
  1. 统计最小值的索引值:idxmin()
df2['Chinese'].idxmin()
  1. 统计最大值的索引值:idxmax()
df2['Chinese'].idxmax()

数据表合并

多个DataFrame数据表的合并相当于多个数据库的表合并

  1. 基于指定列
df3 = pd.merge(df1, df2, on='name')
  1. inner内连接
    inner内连接是merge合并的默认情况,就是找键的交集。
df3 = pd.merge(df1, df2, how='inner')
  1. left左连接
    左连接以第一个DataFrame为主进行连接,第二个DataFrame作为补充
df3 = pd.merge(df1, df2, how='left')
  1. right右连接
    右连接以第二个DataFrame为主进行连接,第一个DataFrame作为补充
df3 = pd.merge(df1, df2, how='right')
  1. outer外连接
    外连接相当于求两个DataFrame的并集
df3 = pd.merge(df1, df2, how='outer')

用SQL操作Pandas

通过pandasql,可以在Python里使用SQL语句来操作Pandas。

pandasql中的主要函数是sqldf,它接收两个参数:一个是SQL查询语句,还有一组环境变量globals()或locals()。这样就可以用SQL语句对DataFrame进行操作。

pysqldf = lambda sql: sqldf(sql, globals())
sql = "select * from df2 where Chinese = 100 "
print(pysqldf(sql))

因为在sql中有对全局参数df2的使用,所以sqldf中也输入了globals()全局参数。

一行代码生成数据分析报告

使用pandas_profiling包就可以实现这一功能。

pandas_profiling会提供以下统计信息:

1、概要:数据类型,唯一值,缺失值,内存大小
2、分位数统计:最小值、最大值、中位数、Q1、Q3、最大值,值域,四分位

3、描述性统计:均值、众数、标准差、绝对中位差、变异系数、峰值、偏度系数

4、最频繁出现的值,直方图/柱状图

5、相关性分析可视化:突出强相关的变量,Spearman, Pearson矩阵相关性色阶图

并且这个报告可以导出为HTML。

安装pandas_profiling

pip install pandas_profiling

生成数据分析报告

report = pandas_profiling.ProfileReport(data)
report.to_file('report.html')

其中data为DataFrame格式的数据。

标签:数据分析,入门,Chinese,df,DataFrame,df2,str,Pandas,columns
来源: https://blog.csdn.net/beilizhang/article/details/112971186

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有