Pandas是一个构建在NumPy之上的较新的包,提供了DataFrame的有效实现。
DataFrames本质上是带有行和列标签的多维数组,通常具有异构类型和/或缺失数据。
Pandas有三种基本的数据结构:
Pandas Series是索引数据的一维数组。
Series可以从列表或数组创建。
Pandas Series有一个与这些值关联的显式定义的索引。
基本结构pd.Series(data=data, index=index)
DataFrame既可以看作是NumPy数组的泛化,也可以看作是Python字典的专门化。
DataFrame作为一个通用的NumPy数组
DataFrame类似于具有灵活行索引和灵活列名的二维数组。
你可以将DataFrame视为一组对齐的Series对象。(这意味着它们共享相同的索引)
DataFrame可以看作是二维NumPy数组的泛化,其中的行和列都有一个用于访问数据的泛化索引。
Index对象既可以看作是不可变数组,也可以看作是有序的多集。
如果您使用过NumPy模式(索引、切片、屏蔽、花式索引和它们的组合),那么在Pandas中对应的模式将会非常熟悉,尽管有一些奇怪的地方需要注意。
请记住,Series对象在许多方面类似于1D NumPy数组,在许多方面类似于标准Python字典。
上一节中的切片和索引可能会引起混淆,尤其是当Series的显式索引标签是整数时。
为了消除这些混淆,Pandas提供了一些“特殊的索引器属性”,这些属性显式地公开某些索引方案。
DataFrame在许多方面类似2D NumPy数组,在其他方面类似于共享相同索引的Series对象的字典。
使用字典样式的语法修改DataFrame对象,在本例中添加一个新列。
我们可以看到DataFrame是一个增强的二维NumPy数组。
使用iloc索引器,我们可以使用隐式python风格的索引来索引底层数组,就好像它是一个单一的NumPy数组一样,但是DataFrame索引和列标签在结果中保持不变。
Pandas继承了NumPy的大部分功能。
然而,Pandas包含了一些有用的变化:
对于一元运算,如反运算和三角函数,这些ufuncs将在输出中保留索引和列标签。
对于加法和乘法等二进制操作,Pandas将在将对象传递给ufunc时自动对齐索引。
如果我们对这些Pandas对象中的任何一个应用NumPy ufunc,结果将是另一个保留索引的Pandas对象。
对于两个Series或DataFrame对象的二进制操作,Pandas将在执行操作的过程中对齐索引。
当您在数据帧上执行操作时,列和索引也会发生类似的对齐类型。
DataFrame和Series之间的操作类似于二维和一维NumPy数组之间的操作。
虽然类型对象数组在某些用途上很有用,但对数据的任何操作都将在Python级别上完成,十分耗费时间
另一种缺失的数据表示形式NaN则不同;它是一个特殊的浮点值,所有使用标准IEEE浮点表示的系统都能识别。
NaN有点像数据病毒——它会感染它接触的任何其他对象。 无论操作是什么,带有NaN的算术结果都将是另一个NaN。
NumPy确实提供了一些特殊的聚合,这些聚合将忽略这些缺失的值。
NaN和None都有自己的位置,而Pandas几乎可以交换地处理它们,在适当的地方在它们之间进行转换。
有时,我们不想删除NA值,而是希望用有效值替换它们。 这个值可能是一个单独的数字,比如0,或者它可能是由好的值进行的某种imputation或插值。
指定一个反向填充以向后传播下一个值。
对于数据帧,选项是类似的,但是我们还可以指定填充发生的轴。
注意,如果前一个值在向前填充期间不可用,NA值仍然保留。
因篇幅问题不能全部显示,请点此查看更多更全内容