pandas
# DataFrame data structure
np.random.randn():
接受形状参数,用于变换出标准正态分布矩阵。(iid)
index 指定行名,columns指定列名。
df = pd.DataFrame(np.random.randn(6, 4), index = dates, columns = list('ABCD'))
DataFrame具有自动补齐功能。(向最长方向进行复制)
这里的dataframe 支持将不同类型的数据存储在同一列中且不做类型转换,
这在R语言中应该是不可以的.
这体现了在数据结构上两种语言很大的不同。
R中的向量类型c(), 会将不同类型的输入数据全部转化成同一种类型,
如c(10, "str") 其相应的class为character, 即R中的字符串类型。
但在np.ndarray中是允许多类型在同一个数组中存在的,这时相应的dtype为object
即可以兼容两种类型的对象。
dataframe有与ndarray类似的接口,如.shape .T
head, tail
index, columns, values
sort_index, sort_value
ascending 参数用于控制是否上升排列。
dataframe对象有两种访问列的能力, 如A为列cloumn name
df.A 与df['A']等价。
dataframe的切片与索引规则:
对行或列:
dataframe的切片运算仅可以对行进行切片取相应的值,这与
其内置的ndarray访问行的接口相一致(接口应当是这样设置的)。
其的取item运算(这里指调用与[]有关的方法取dataframe的某行或某列),
在行列的表现很不相同,对于列的调用在前面已经说过了,其有类似于类调用
方法的接口或直接对列名__getitem__,
对于行要想__getitem__,为了与列相区分,不能直接调用[],
首先,从前面使用下标的切片运算的方法可以得到某行(这与python内置序列切片
相同),另外一种方法是使用行名(index)来访问相应的行,但要注意到这里与利用
行标切片的不同之处在于这里不再使用 python内置的[a,b)的方法进行对于切片的
选取,而是采用[a, b]的切片模式,其原因应当与要利用行名进行单行访问的需求
相契合。因为当要利用行名访问单行时,必要地要仅仅使用最少的信息,
————该行行名,
故在不需要下一行行名时是最好的,这样避免了要使用[a, a + 1),要已知 a + 1
行名的要求,这样为使用[a, a]进行单行访问提供了方便。
这里一定要对slice运算与__getitem__ 进行区分,python在进行切片运算(如
range(a, b)时调用的是slice函数与__getitem__不同)
行列双重切片
dataframe的行列名称双重切片基本上与ndarray的切片规则相同,[a1: b1, a2:b2]
但这里需要使用接口loc(这里要注意前面讨论的名称切片形式)
相应地行列下标的双重切片使用iloc
讨论到这里感觉dataframe对象并没有提供很多功能(无论在有关于数据类型的数据存储上
,还是有关于数据操作的方法上)ndarray都提供了足够的支持。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# s has the type of Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
# dates can generate dates interface
dates = pd.date_range('20130101', periods = 6)
# DataFrame data structure
np.random.randn():
接受形状参数,用于变换出标准正态分布矩阵。(iid)
index 指定行名,columns指定列名。
df = pd.DataFrame(np.random.randn(6, 4), index = dates, columns = list('ABCD'))
DataFrame具有自动补齐功能。(向最长方向进行复制)
这里的dataframe 支持将不同类型的数据存储在同一列中且不做类型转换,
这在R语言中应该是不可以的.
这体现了在数据结构上两种语言很大的不同。
R中的向量类型c(), 会将不同类型的输入数据全部转化成同一种类型,
如c(10, "str") 其相应的class为character, 即R中的字符串类型。
但在np.ndarray中是允许多类型在同一个数组中存在的,这时相应的dtype为object
即可以兼容两种类型的对象。
dataframe有与ndarray类似的接口,如.shape .T
head, tail
index, columns, values
sort_index, sort_value
ascending 参数用于控制是否上升排列。
dataframe对象有两种访问列的能力, 如A为列cloumn name
df.A 与df['A']等价。
dataframe的切片与索引规则:
对行或列:
dataframe的切片运算仅可以对行进行切片取相应的值,这与
其内置的ndarray访问行的接口相一致(接口应当是这样设置的)。
其的取item运算(这里指调用与[]有关的方法取dataframe的某行或某列),
在行列的表现很不相同,对于列的调用在前面已经说过了,其有类似于类调用
方法的接口或直接对列名__getitem__,
对于行要想__getitem__,为了与列相区分,不能直接调用[],
首先,从前面使用下标的切片运算的方法可以得到某行(这与python内置序列切片
相同),另外一种方法是使用行名(index)来访问相应的行,但要注意到这里与利用
行标切片的不同之处在于这里不再使用 python内置的[a,b)的方法进行对于切片的
选取,而是采用[a, b]的切片模式,其原因应当与要利用行名进行单行访问的需求
相契合。因为当要利用行名访问单行时,必要地要仅仅使用最少的信息,
————该行行名,
故在不需要下一行行名时是最好的,这样避免了要使用[a, a + 1),要已知 a + 1
行名的要求,这样为使用[a, a]进行单行访问提供了方便。
这里一定要对slice运算与__getitem__ 进行区分,python在进行切片运算(如
range(a, b)时调用的是slice函数与__getitem__不同)
行列双重切片
dataframe的行列名称双重切片基本上与ndarray的切片规则相同,[a1: b1, a2:b2]
但这里需要使用接口loc(这里要注意前面讨论的名称切片形式)
相应地行列下标的双重切片使用iloc
讨论到这里感觉dataframe对象并没有提供很多功能(无论在有关于数据类型的数据存储上
,还是有关于数据操作的方法上)ndarray都提供了足够的支持。