前言
本书第1版于2012年出版,那时Python中像pandas这样的开源数据分析库刚出现不久,但发展十分迅速。当我在2016年和2017年创作第2版时,不仅要将Python更新到3.6版本(第1版使用的是Python 2.7),还要更新过去5年间pandas的诸多变更。2022年,Python语言变化很少(目前是Python 3.10,2022年年底会推出3.11),但pandas的演进一直在持续。
第3版的目标是让知识点紧跟Python、NumPy、pandas的发展,以及其他项目的最新版本,较少涉及过去几年新推出的Python项目。因为本书已经成为许多大学课程和职场专业人士的重要参考资料,所以我会尽力避免书中内容在短期内过时的情况。
本书的新特点是读者可以访问本书的在线版本(https://wesmckinney.com/book)。我会持续更新在线版本,如果读者碰到书中运行有误的地方,不妨及时查询线上内容的修订。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
表示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
读者可以在本书的GitHub仓库https://github.com/wesm/pydata-book找到书中每章的数据文件和相关材料。如果访问GitHub不便,还可以访问本书的Gitee镜像地址https://gitee.com/wesmckinn/pydata-book。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Python for Data Analysis,作者Wes McKinney,由O'Reilly出版,书号978-1-098-10403-0。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@oreilly.com联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、视频在我们的在线学习平台上分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本资料和视频资源。有关的更多信息,请访问https://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://oreil.ly/python-data-analysis-3e上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://oreilly.com。
我们在LinkedIn上的地址:https://linkedin.com/company/oreilly-media。
我们在Twitter上的地址:http://twitter.com/oreillymedia。
我们在YouTube上的地址:http://www.youtube.com/oreillymedia。
致谢
本书的出版离不开世界各地同行专家富有成果的讨论、合作和帮助,对他们表示感谢。
怀念John D. Hunter(1968—2012)
在我完成本书第1版最终手稿不久,我们亲爱的朋友和同事John D. Hunter经历了一场与结肠癌的搏斗后,于2012年8月28日过世了。
John对Python科学计算和数据社区的影响之大难以估量,他给我们留下了丰厚的“遗产”。除了在2000年年初开发matplotlib(Python那时还不像现在这么流行)外,他还致力于塑造核心一代开源开发者的文化氛围,这代开发者如今已成长为Python社区生态的顶梁柱。Python社区生态对Python语言来说举足轻重,这要感恩John的贡献。
在我开源生涯的早期,pandas刚刚发布了0.1版本,我在2010年1月有幸结识了John。那时是他的至暗时刻,但他仍然给我鼓励和指导,驱动着我前进,最终促使我的愿景得以实现——pandas和Python成为一流的数据分析语言。
John与IPython、Jupyter项目的先驱Fernando Pérez、Brian Granger,以及其他很多Python社区发起人联系紧密。我们4人曾设想共同创作一本书,但因为只有我的个人时间最自由,所以这个想法被搁置了。我非常确信,John会为过去9年中我们个人以及社区所取得的成就感到骄傲。
第3版致谢(2022)
距离我创作本书第1版已经过去10年了,我踏上Python程序员的旅程也已经有15年之久。回顾过往,真是沧桑巨变!Python从一门边缘的数据分析语言成长为最广泛使用的语言,并成为数据科学、机器学习、人工智能工作中多数(也许是绝大多数!)人的选择。
我从2013年开始就不再是pandas开源项目的活跃贡献者了,但是pandas遍及世界的开发者社区持续蓬勃发展,成为以社区为中心的开源软件运动的标杆。许多“次世代”的处理表格型数据的Python项目都以pandas为范本,构建其人机交互。pandas对Python数据科学生态的未来发展产生了持续的影响力。
希望本书能继续成为学生和职场人士从事Python数据工作的重要学习材料。
我要特别感谢O'Reilly允许我在个人网站上发布本书的在线开源版本,地址是https://wesmckinney.com/book,希望在线版本能惠及更多读者,帮助他们在数据分析领域拓展更多机会。这一切成为可能,J. J. Allaire功不可没,他帮我将本书文件从Docbook XML转换为Quarto(https://quarto.org)——这是一款崭新且强大的纸质版和网页发布系统,可用于科学和技术领域。
我还要特别感谢技术审校者Paul Barry、Jean-Christophe Leyder、Abdullah Karasan和William Jamir,他们的细致反馈显著提升了本书的可读性、清晰性和可理解性。
第2版致谢(2017)
距离2012年7月我完成本书第1版手稿已有5年了,这段时间发生了很多事,Python社区蓬勃发展,围绕Python的开源软件生态也十分繁荣。
pandas核心开发者孜孜不倦地付出,使得pandas项目高速成长,也使得pandas的用户群体遍布Python数据科学生态的各个角落,没有他们本书将不会存在。pandas的核心开发者包括但不限于Tom Augspurger、Joris van den Bossche、Chris Bartak、Phillip Cloud、gfyoung、Andy Hayden、Masaaki Horikoshi、Stephan Hoyer、Adam Klein、Wouter Overmeire、Jeff Reback、Chang She、Skipper Seabold、Jeff Tratner和y-p。
在第2版的写作过程中,非常感谢O'Reilly的工作人员对于写作流程给予的耐心帮助,他们是Marie Beaugureau、Ben Lorica和Colleen Toporek。我再次得到了优秀技术审校者的支持,他们是Tom Augspurger、Paul Barry、Hugh Brown、Jonathan Coe和Andreas Müller。
本书第1版已经被翻译成多国语言,包括汉语、法语、德语、日语、韩语和俄语。将本书翻译成外文是一份艰巨却默默无闻的工作,感谢译者帮助世界各地更多的人学习编程和使用数据分析工具。
在过去几年中,Cloudera和Two Sigma投资公司对我的持续开源开发工作的支持使我感到十分幸运。相对于用户基数,开源项目获取到的资源渐趋减少,商业机构向重要开源项目提供开发支持变得越来越重要。这是一件值得投入的工作。
第1版致谢(2012)
如果没有众多相关人士的支持,写作本书对我来说将会十分艰难。
对于O'Reilly的工作人员,我非常感谢编辑Meghan Blanchette和Julie Steele,他们在整个写作过程中给予了我很多指导。另外,Mike Loukides还在立项阶段与我一起工作,帮助本书出版。
我得到了大量相关人士的技术评论。尤其是Martin Blais和Hugh Brown,他们在提高本书示例的质量、内容清晰度和全书组织方面提供了很多有价值的帮助。James Long、Drew Conway、Fernando Pérez、Brian Granger、Thomas Kluyver、Adam Klein、Josh Klein、Chang She和Stéfan van der Walt都审阅了本书的一章或多章,从很多角度提供了有效反馈。
我从数据社区的朋友和同行那里获得了很多关于示例和数据集的优秀想法,他们是:Mike Dewar、Jeff Hammerbacher、James Johndrow、Kristian Lum、Adam Klein、Hilary Mason、Chang She和Ashley Williams。
当然,我也非常感激Python开源科学社区的众多领头人,他们为我的开发工作打下了基础,并在本书的写作过程中给予我鼓励,包括IPython核心团队(Fernando Pérez、Brian Granger、Min Ragan-Kelly、Thomas Kluyver等)、John Hunter、Skipper Seabold、Travis Oliphant、Peter Wang、Eric Jones、Robert Kern、Josef Perktold、Francesc Alted、Chris Fonnesbeck等。很多人一直以来提供了支持、想法和鼓励,包括Drew Conway、Sean Taylor、Giuseppe Paleologo、Jared Lander、David Epstein、John Krowas、Joshua Bloom、Den Pilsworth、John Myles-White。
我还要感谢生活中的一些人。首先是AQR的前同事,他们是:Alex Reyfman、Michael Wong、Tim Sargen、Oktay Kurbanov、Matthew Tschantz、Roni Israelov、Michael Katz、Ari Levine、Chris Uga、Prasad Ramanan、Ted Square和Hoon Kim。最后,感谢我的指导教授Haynes Miller(麻省理工学院)和Mike West(杜克大学)。2014年,我在更新本书代码示例和修正一些由于pandas变更产生的错误时,从Phillip Cloud和Joris van den Bossche那里获得了重要帮助。
个人方面,感谢Casey在我写作过程中提供了无价的生活支持,她忍受我的情绪起伏直到我完成最终手稿。最后,感谢我的父母Bill和Kim,他们教会我如何去追寻梦想、永不止步。