Pandas 初探(二)

对于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 dates


df = 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.dtypes


print "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.values


print "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 df1


print "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 s


print "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)

















 







































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值