pandas官方文档中有一份快速入门教程《ten Minutes to pandas》,虽然网上早有其中文翻译,不过可能是旧版的:)所以闲来无事,自己也翻译最新版本的学习一下。
这里示例部分都由代码和运行结果图片组成,读者可以直接复制代码来运行;同时为了更清晰,加入了一些小结构标题,所以在小细节处跟官方文档略有不同。本机的运行环境是Python 3.5.2 |Anaconda 4.2.0 (64-bit) ,pandas库的版本为0.19.2,使用jupyter noterbook作为交互环境,对照的这份文档版本为 0.19.2 。这篇文章是对 ten-Minutes-to-pandas的上半部分的翻译。
以下正文开始:
总说
这是一份主要面向新手的对pandas库的简要介绍。想了解更多,你可以通过阅读Cookbook
通常,我们像下面这样导入:
创建对象(Object Creadtion)
可以通过查看Data Structure Intro section来获取关于这节的更多内容
创建Series
我们可以通过传递列表(list)来创建 Series,pandas会自动为其生成默认整数索引。
创建DataFrame
传递数组
我们可通过传递数组对象(numpy array),时间索引(datetime index)、列标签(labeled columns)来创建 DataFrame
|
|
传递字典
我们可以通过传递一个能被转换成类似序列(Serise-like)的字典对象(dict)来创建 DataFrame
|
|
它们的列有不同的数据类型
IPython
如果你使用 IPython ,那么tab键能自动补全 列名(column names)和 属性( public attributes)。下面是能被自动补全的属性的一个子集:
(注:如上图红箭头处按 tab键 )
你可以看到,列名 A 等会被自动补齐……
(原文:As you can see, the columns A, B, C, and D are automatically tab completed. E is there as well; the rest of the attributes have been truncated for brevity。 因为没有做和原文相似的图,所以这句只好:)不翻译了hh )
查看数据(Viewing Data)
查看 Basics section 获得关于这节的更多内容。
查看frame中的头部和尾部部分的行
|
|
显示索引、列名、底层numpy数据(the underlying numpy data)
|
|
(注:这个values,应该就是把df中的数据直接以numpy array的形式打印出来,注意与前面的 df 命令图片对比一下)
对数据进行快速简单统计
|
|
(注:count:计数,多少个hh;mean:平均数;std:方差;min:最小值;25%:分位数; 50%:分位数,中位数;75%:分位数;max:最大值)
转置(Transposing)
|
|
排序
按轴排序(Sorting by an axis)
|
|
(注:axis=1表明按照column来排序,关于axis的讨论参见 Stackoverflow:What does axis in pandas mean?;ascending=False说明要用降序排序,其默认值True代表升序)
按值排序(Sorting by values)
|
|
(注:这里没有传入或没有显式指定ascending参数,则其默认值为True,为升序排列。)
选择(Selection)
尽管python/numpy的关于选择(selecting )和设定(setting)的表达式能直接(intuitive)在交互式环境(interactive work)中派上用场,但在实际工作中,我们推荐使用经过优化(optimized)的pandas方法:.at, .iat, .loc, .iloc 和 .ix.
想了解更多请查阅:《Indexing and Selecting Data》和《MultiIndex/Advanced Indexing》
获取数据(Getting)
获取列
选择单独的一列,返回一个 Series 对象,相当于 df.A
(注:这里附上 df.A 的结果:)
获取行
通过 [ ] 对行进行选取,这操作会对行进行切片(slice)
|
|
|
|
通过标签选择(Selection by Label)—— .loc
(注:由于写这篇时间过长,jupyter notebook中前面的代码要重新运行一遍,而前面的示例中使用了random函数产生的随机值,所以重新运行后下面的数据会跟上面的数据不太一样,这里放上重新运行后 df值 的图,以作为对照。)
想了解关于本节更多内容请查看 Selection by Label
通过标签获得交叉区域(cross section)
|
|
通过标签进行多轴选择(multi-axis)
|
|
标签切片,两端确定
|
|
缩减返回对象的维度
|
|
获取标量值
|
|
快速获取标量值
结果与前面一个方法相同
(注:.loc和 .at运行时间对比如下:)
通过位置选择(Selection by Position)—— .iloc
想了解本节更多内容请查看 Selection by Position
通过传入整数来选择
|
|
数值切片,跟numpy/python类似
|
|
传入指定位置(整数)的列表,与numpy/python类似
|
|
对行切片(slicing rows)
|
|
对列切片(slicing columns)
|
|
取值(标量值)
|
|
更快取值(标量值)
|
|
(注:以下是 .iloc 和 .iat 的时间比较。)
通过布尔表达式进行索引(Boolean Indexing)
使用单独一列来选择数据
|
|
使用 where 操作来选择数据
|
|
(注:虽然没有出现where,但这个确实是where操作)
使用 isin() 方法来过滤数据
|
|
|
|
设置(Setting)
设置新的列,使其数据自动按索引排列
|
|
通过标签(label)来设置数值
|
|
通过位置(position)来设置数值
|
|
通过指定numpy数组来设置数值
|
|
经过前面一堆操作后的结果:
通过 where 操作来设置数值
|
|
处理缺失值(Missing Data)
pandas主要用值 np.nan 来表示缺失值。默认情况下,它不会参与计算。更多内容查看 Missing Data section
重索引(Reindexing)
重索引能让你对特定的轴(axis)来进行索引的改变/添加/删除。它会返回一个复制值(注:也就是说不会改变原本的数据)。
删除所有具有缺失值的行(dropna)
|
|
填充缺失值(fillna)
|
|
缺失值的布尔表达式(isnull)
|
|