Pandas 初探(二)

来源:互联网 发布:英语学习软件开发 编辑:程序博客网 时间:2024/05/22 15:18
对于pandas DataFrame对象的理解可以参看numpy.ndarray的一些细节,
仅仅是添加了一些方便的接口。


可以直接使用[]进行行切片访问,对于列中的情况,使用loc[],一般也是直接
根据行进行切片,添加":" 后与numpy.ndarray的多维数组的切片方式类似
可以进行列切片。(类别切片)
对于数值的单个元素访问可以使用at 且有其访问速度比进行切片访问快的说明。


DataFrame iloc接口提供了与numpy.ndarray类似的访问方式,应当是直接实现
对数据源的快速访问。类似的对数值实现单个快速访问的对应方法是iat


DataFrame本质上可以看成若干Series按列排成的数据表,有一种初始化方式
就是通过字典,以键为列,以Series为值组成的表,这种结构不仅是一种
形式表示,也是接口的一致性设计,如DataFrame.sub方法,可以以Series为
输入,当axis='index'时会返回相应的切片序列。


np.cumsum是延flatten方向进行累加 但当施用到DataFrame时(df.apply)是延列
进行累加的,其原因在于相同的列默认具有相同的类型,故对相同的类型实施相关
运算作用效果是对列的。
aqpply还可以通过lambda表达式进行进一步简单自定义。
注意lambda表达式的进入接口与一般函数相同,是列Series。


Series进行频数统计的方法与np.ndarray有所不同,后者是通过
np.unique(return_counts = True)来完成,前者是 s = pd.Series(...)
s.value_counts()


DataFrame append 是针对row进行的。(df.append(s))
ignore_index指定是否忽略index  default = False 也就是说在append可能
得到非保序的index.


测试代码:
import pandas as pd import numpy as np import matplotlib.pyplot as plt s = pd.Series([1, 3, 5, np.nan, 6, 8])print "s :"print s dates = pd.date_range('20130101', periods = 6)print "dates :"print datesdf = pd.DataFrame(np.random.randn(6, 4), index = dates, columns = list("ABCD"))print "df :"print df df2 = pd.DataFrame({"A": 1,"B": pd.Timestamp('20130102'),"C": pd.Series(1, index = list(range(4)), dtype = 'float32'),"D": np.array([3] * 4, dtype = 'int32'),"E": pd.Categorical(["test", "train", "test", "train"]),"F": 'foo'})print "df2 :"print df2 print "df2.dtypes :"print df2.dtypesprint "df.head() :"print df.head()print "df.tail(3) :"print df.tail(3)print "df.index :"print df.index print "df.columns :"print df.columns print "df.values :"print df.valuesprint "df.discribe() :"print df.describe()print "df.T :"print df.T print "sorting by index :"print df.sort_index(axis = 1, ascending = False)print "sorting by values :"print df.sort_values(by = "B")print "Selecting by A :"print "df['A'] :"print df['A']print "rows :(not include)"print "df[0:3] :"print df[0:3]print "rows another :(include)"print "df['20130102':'20130104'] :"print df['20130102': '20130104']print "df.loc[dates[0]] :"print df.loc[dates[0]]print "df.loc[:, ['A', 'B']] :"print df.loc[:, ['A', 'B']]print "df.loc['20130102: '20130104', ['A', 'B']]"print df.loc['20130102': '20130104', ['A', 'B']]print "df.loc['20130102', ['A', 'B']] :"print df.loc['20130102', ['A', 'B']]print "df.loc[dates[0], 'A'] :"print df.loc[dates[0], 'A']print "df.at[dates[0], 'A'] :"print df.at[dates[0], 'A']print "df.iloc[3] :"print df.iloc[3]print "df.iloc[3:5, 0:2] :"print df.iloc[3:5, 0:2]print "df.iloc[[1, 2, 4], [0, 2]] :"print df.iloc[[1, 2, 4], [0, 2]]print "df.iloc[1:3, :] :"print df.iloc[1:3, :]print "df.iloc[:, 1: 3] :"print df.iloc[:, 1:3]print "df[df.A > 0] :"print df[df.A > 0]print "df[df > 0] :"print df[df > 0]df2 = df.copy()df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']print "df2 :"print df2 print "df2[df2['E'].isin(['two', 'four'])] :"print df2[df2['E'].isin(['two', 'four'])]s1 = pd.Series([1, 2, 3, 4, 5, 6], index = pd.date_range('20130102', periods = 6))print "s1 :"print s1 df['F'] = s1 df.at[dates[0], 'A'] = 0 df.iat[0, 1] = 0 df.loc[:, 'D'] = np.array([5] * len(df))print "df :"print df df2 = df.copy() df2[df2 > 0] = -df2 print "df2 :"print df2 df1 = df.reindex(index = dates[0:4], columns = list(df.columns) + ['E'])df1.loc[dates[0]: dates[1], 'E']print "df1 :"print df1print "drop value :"print df1.dropna(how = 'any')print "fill value :"print df1.fillna(value = 5)print "pd.isnull(df1) :"print pd.isnull(df1)print "mean :"print df.mean()print "mean along 1 :"print df.mean(1)s = pd.Series([1, 3, 5, np.nan, 6, 8], index = dates).shift(2)print "s :"print sprint "apply cumsum :"print df.apply(np.cumsum)print "max - min :"print df.apply(lambda x: x.max() - x.min())s = pd.Series(np.random.randint(0, 7, size = 10))print "s :"print s print "values counts :"print s.value_counts()s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])print "lower cases :"print s.str.lower()df = pd.DataFrame(np.random.randn(10, 4))print "df :"print df pieces = [df[:3], df[3:7], df[7:]]print "concat :"print pd.concat(pieces)left = pd.DataFrame({'key': ['foo', 'foo'], "lval": [1, 2]})right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})print "left :"print left print "right :"print right print "merge :"print pd.merge(left, right, on = 'key')df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])print "df :"print df s = df.iloc[3]print "append conclusion :"print df.append(s, ignore_index = True)




 







































0 0