共计 2702 个字符,预计需要花费 7 分钟才能阅读完成。
Pandas 是 Python 的一个 数据分析库,提供如 DataFrame 等非常容易操作的数据结构,是近年做数据分析时不可或缺的工具之一。
尽管曾经有满坑满谷的教学文章、视频或是线上课程,正是因为 pandas 学习资源之多,导致初学者经常不知如何踏出第一步。
在这篇文章外头,咱们将靠近 40 个实用的 pandas 技巧由浅入深地分成 6 大类别:
建设 DataFrame
定制化 DataFrame 显示设定
数据清理 & 整顿
获得想要关注的数据
根本数据处理与转换
简略汇总 & 剖析数据
通过有系统地出现这些 pandas 技巧,咱们心愿能让更多想要利用 Python 做数据分析或是想成为 data scientist 的你,能用最有效率的形式把握外围 pandas 能力;同时也心愿你能将本人认为实用但本文没有提到的技巧与咱们分享。
废话不多说啦,让咱们开始这趟 pandas 旅程吧!当然,首先你得 import pandas:
建设 DataFrame
pandas 里有十分多种能够初始化一个 DataFrame 的技巧:
1. 用 Python dict 建设 DataFrame
应用 Python 的 dict 来初始化 DataFrame 非常直观,基本上 dict 外头的每一个键(key)都对应到一个列名称,而其值(value)则是一个 iterable,代表该列外头所有的数值。
在须要治理多个 DataFrames 时你会须要用更有意义的名字来代表它们,但在数据迷信畛域里只有看到 df,每个人都会预期它是一个 Data Frame,不论是 Python 或是 R 语言的使用者。
很多时候你也会须要扭转 DataFrame 里的列名称:
这里也很直观,就是给一个将旧列名对应到新列名的 Python dict。值得注意的是参数 axis=1:在 pandas 里大部分函数预设解决的轴为行(row),以 axis= 0 示意;而将 axis 设置为 1 则代表你想以列(column)为单位套用该函数。
你也能够用 df.columns 的形式扭转列名称:
2. 应用 pd.util.testing 随机建设 DataFrame
当你想要随便初始化一个 DataFrame 并测试 pandas 性能时,pd.util.testing 就显得非常好用:
head 函数预设用来显示 DataFrame 中前 5 项数据,要显示最初数据则能够应用 tail 函数。
你也能够用 makeMixedDataFrame 建设一个有各种数据类型的 DataFrame 不便测试:
其余函数如 makeMissingDataframe 及 makeTimeDataFrame 咱们在前面的章节介绍应用。
3. 将剪贴簿内容转换成 DataFrame
你能够从 Excel、Google Sheet 或是网页上复制表格并将其转成 DataFrame。
只需简略 2 个步骤:
复制其余起源的表格;
执行 pd.read_clipboard;
这个技巧在你想要疾速将一些数据转成 DataFrame 时十分不便。
4. 读取线上 CSV 文档
不限于本地档案,只有有正确的 URL 以及网络连接就能够将网络上的任意 CSV 档案转成 DataFrame。比方说你能够将 Kaggle 驰名的 Titanic 比赛的 CSV 档案从网络上下载下来并转成 DataFrame:
过来人教训,尽管像这样利用 pandas 间接从网络上下载并剖析数据很不便,然而有时 host 数据的网页与机构(尤其是政府机关)会无预期地批改他们网站,导致数据集的 URL 生效。为了最大化重现性,我还是会倡议将数据载到本地备份之后,再做剖析比拟切实。
5. 优化内存使用量
你能够透过 df.info 查看 DataFrame 以后的内存用量:
从最初一列能够看出 Titanic 这个小 DataFrame 只占了 322 KB。这边应用的 df 不占什么内存,但如果你想读入的 DataFrame 很大,能够只读入特定的栏位并将已知的分类型(categorical)栏位转成 category 型态以节俭内存(在分类数目较数据量小时无效):
通过缩小读入的栏位数并将 object 转换成 category 栏位,读入的 df 只剩 135KB,只需刚刚的 40% 内存用量。
另外如果你想在无限的内存解决微小 CSV 文档,也能够透通过 chunksize 参数来限度一次读入的行数(rows):
定制化 DataFrame 显示设定
尽管 pandas 会尽可能地将一个 DataFrame 残缺且丑陋地出现进去,有时候你还是会想要扭转预设的显示方式。这节列出一些常见的应用情境。
1. 残缺显示所有列
有时候一个 DataFrame 外头的栏位太多,pandas 会主动省略某些两头栏位以放弃页面整洁:
但如果你无论如何都想要显示所有栏位以不便一次查看,能够透过 pd.set_option 函数来扭转 display.max_columns 设定:
1 pd.set_option(“display.max_columns”, None)
2 df
另外你也能够应用 T 来转置(transpose)以后 DataFrame,垂直显示所有栏位:
1 df.T.head (15)
此外,你能够在 pandas 官网文件里查看其余罕用的显示设定。
2. 缩小显示的栏位长度
这边你一样能够通过 pd.set_option 函数来限度 Titanic 数据集外头 Name 栏位的显示长度:
3. 扭转浮点数显示位数
除了栏位长度以外,你经常会想要扭转浮点数(float)显示的小数点位数:
你会发现 Fare 栏位当初只显示小数点后一位的数值了。另外留神刚刚设定的 max_colwidth 是会被套用到所有 DataFrame 的。因而这个 DataFrame 的 Name 栏位显示的宽度还跟上个 DataFrame 雷同:都被缩减了。
想要将所有调整过的设定初始化,能够执行:
1 pd.reset_option(“all”)
其余罕用的 options 蕴含:
max_rows
max_columns
date_yearfirst
等等。执行 pd.describe_option()能够显示所有可供使用的 options,但如果你是在 Jupyter notebook 内应用 pandas 的话,我举荐间接在 set_option 函式的括号里输出 Shift+ tab 显示所有选项。
另外值得一提的是 pandas 函数都会 回传解决后的后果,而不是间接批改原始 DataFrame。
这让你能够轻松地把多个函式串(chain)成一个简单的数据处理 pipeline,但又不会影响到最原始的数据:
瞧!原来的 DataFrame 还是挺淳厚的,留神 Fare 栏位里的小数点并没有因为刚刚的 styling 而变少,而这让你在出现 DataFrame 时有最大的弹性。
以上是思迈特软件的一些技术分享,心愿对您有所帮忙!