pandas 库简介

上周分享了数据分析用到的一个库:Numpy 库,今天分享一个比 Numpy 更高效的库:pandas,它可以对数据进行导入、清洗、处理、统计和输出。pandas 是基于 Numpy 库的,可以说,pandas 库就是为数据分析而生的。

环境

语言:Python 3.6

安装&导入

用 pip 命令快速安装 pandas 库。

pip install pandas

安装完后再编辑器中导入。

import pandas as pd

读取文件

读取你的 excel 文件,并另存为 csv 格式的文件。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('test.xlsx'))
df.to_csv('test1.csv')
print(df)

读取过程中可能会报错,提示你缺少 xlrd 模块的情况,用 pip 命令安装即可。

打印出读取到的数据,我们发现,文件中单元格为空的数据以 NAN 代替了。

当然,也可以直接读取文件并打印,不给参数的话默认只打印前 5 行数据。以我之前爬取的热门歌手文件为例。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
print(df.head(8))

打印结果如下:

  歌手名字  歌手ID
0  周杰伦  6452
1  陈奕迅  2116
2  薛之谦  5781
3  林俊杰  3684
4  李荣浩  4292
5  张学友  6460
6  杨宗纬  6066
7   许巍  5770

清洗数据

我们知道,从事数据分析工作的,80% 的时间都花在数据清洗上面,因为我们从各个渠道获取的信息格式不统一,我们需要对他们进行清洗。

清洗数据主要内容如下:

  • 删除 DataFrame 中的不必要列和行。

  • 重命名 columns 为一组更易识别的标签。

  • 更改数据格式。

  • 去除数据间空格或者特定字符。

  • 去除重复的行。

  • 查找空值。

删除行或者列

我们还是以刚才歌手信息为例,为了看删除效果,我加了一列信息:性别,下面只显示部分信息。

  歌手名字  歌手ID 性别
0  周杰伦    6452   男
1  陈奕迅    2116   男
2  薛之谦    5781   男
3  林俊杰    3684   男
4  李荣浩    4292   男
5  张学友    6460   男
6  杨宗纬    6066   男
7   许巍     5770   男

删除性别这一列。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df.drop(columns=['性别'])
print(df1)

执行后发现刚加的「性别」这一列已被删除。

删除某一行,比如删除李荣浩这一行信息,我们通过上面可以知道这一行的 index 是 4。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df.drop(index=['李荣浩'])
print(df1)

执行后结果如下,我们发现,index 为 4 的这一行信息已被删除。

   歌手名字  歌手ID   性别 
0   周杰伦    6452    男
1   陈奕迅    2116    男
2   薛之谦    5781    男
3   林俊杰    3684    男
5   张学友    6460    男
6   杨宗纬    6066    男
7    许巍     5770    男
重命名列名

用 rename 方法将列名修改成自己需要的列名,比如歌手名字换成 SName。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df.rename(columns={'歌手名字': 'SName'}, inplace=True)
print(df)
更改数据格式

用 astype 更改数据格式。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df['歌手ID'].astype('str')
删除数据间空格
df = DataFrame(pd.read_excel('歌手.xlsx'))
df['歌手名字'] = df['歌手名字'].map(str.strip)  # 删除左右两边空格
df['歌手名字'] = df['歌手名字'].map(str.lstrip)  # 删除左边空格
df['歌手名字'] = df['歌手名字'].map(str.rstrip)  # 删除右边空格

去除重复的行

用自带的方法一行代码可以搞定。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df = df.drop_duplicates()
查找空值

我们可以用 isnull 方法查找数据中的空值或者 NAN,返回的是 Boolean 类型,False 表示不是空值,True 表示空值。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df = df.isnull()
print(df)

为了展示效果,我执行前去掉了第 5 行的信息,所以第 5 行出现一个 True。

     歌手名字  歌手ID
0      False    False
1      False    False
2      False    False
3      False    False
4      True     False

数据统计

上周讲 Numpy 库时也讲到了对数据的统计,计算数据最大值、最小值、平均值、方差、标准差等。pandas 也可以做这些工作,而且 pandas 中的 describe 可以直接显示这个数据。

我们先创建一个科目成绩的数据。

df = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
print(df)

数据如下:

  subject  data
0       语    90
1       数    91
2       外    92
3       理    93
4       化    94

我们用 describe 方法直接显示这些统计数据。

df = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
print(df.describe())

结果如下:

            data
count   5.000000
mean   92.000000
std     1.581139
min    90.000000
25%    91.000000
50%    92.000000
75%    93.000000
max    94.000000

多表合并

如果我们有多个数据表,我们需要对他进行合并处理。以下这些知识点和 SQL 很相似,如果你对 SQL 语句熟悉的话,以下很容易理解

对相同的列进行合并
df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, on='subject')
print(df3)

两个表中,语数外是相同的,进行合并,结果如下:

  subject  data_x  data_y
0       语      90      90
1       数      91      91
2       外      92      92
内连接

也就是两个数据表中的交集部分。

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='inner')
print(df3)

结果显示两个表中相同的数据。

  subject  data
0       语    90
1       数    91
2       外    92
左连接

以左表为主,右表只显示交集部分的数据。

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='left')
print(df3)

执行结果:

  subject  data
0       语    90
1       数    91
2       外    92
3       理    93
4       化    94
右连接

以右表为主,左表只显示交集部分的数据。

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='right')
print(df3)

执行结果:

  subject  data
0       语    90
1       数    91
2       外    92
3       史    93
4       地    94
全连接

显示两个表数据的并集。

df1 = DataFrame({'subject': ['语', '数', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['语', '数', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='outer')
print(df3)

执行结果:

  subject  data
0       语    90
1       数    91
2       外    92
3       理    93
4       化    94
5       史    93
6       地    94

pandas 库的对于数据分析的基本用法就介绍到这里。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,269评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,939评论 6 13
  • 参考资料: Pandas 文档 开始 安装 pip install pandas使用前需导入模块:import p...
    喔蕾喔蕾喔蕾蕾蕾阅读 1,735评论 0 3
  • 如果爱,请深爱。但你可知,爱的能力也是需要习得的。没有人一开始就会爱别人(除了父母爱孩子的天性),只是在不断的学习...
    勿扰_e316阅读 113评论 0 0
  • 不知不觉中你变老了,两边的鬓发白的那么耀眼,在太阳的照射下晃的人都睁不开眼。有时不禁的想,这眼前的人到底是谁?是那...
    清浅菇娘阅读 192评论 1 4