pandas数据结构之DataFrame笔记
DataFrame输出的为表的形式,由于要把输出的表格贴上来比较麻烦,在此就不在贴出相关输出结果,代码在jupyter notebook可以顺利运行
代码中有相关解释用来加深理解方便记忆
1 import numpy as np 2 import pandas as pd 3 4 d = {'one':pd.Series([1,2,3],index=['a','b','c']), 5 'two':pd.Series([1,2,3,4],index=['a','b','c','d'])} 6 7 df = pd.DataFrame(d) # 通过字典创建DataFrame,其中'one'列,没有'd'索引,所以赋值 8 # 为NaN 9 10 df = pd.DataFrame(d, index=['d','b','a']) # 可以对原有的DataFrame再创建,选取其中 11 # 的行索引,index表示行索引 12 13 df = pd.DataFrame(d, columns=['two','three']) # 也可以对列进行操作,如果选择的列 14 # 不存在,则自动添加到下一列 15 # 并赋值为NaN,colums表示的是列索引 16 17 d = {'one':[1,2,3,4], 18 'two':[21,22,23,24]} # 字典创建的DataFrame,键表示列索引,如果没有给定行索 19 # 引,DataFrame会赋默认值 20 df = pd.DataFrame(d) 21 22 data = [(1,2.2,'Hello'),(2,3.,'World')] # 这个列表中的两个元组将作为行值被操作 23 df = pd.DataFrame(data,index=['one','two'],columns=list('ABC')) 24 25 data = [{'a':1,'b':2},{'a':5,'b':10,'c':20}] # 这个列表中的字典的键将被作为列索引 26 # 创建,每个字典分别作为行处理 27 28 df = pd.DataFrame(data,index=['A','B'],columns=['a','b','e']) 29 # 再次定义列索引时,若字典中没有对应的列将赋值为NaN,对应的列位置也将被 30 # cloums对应的列索引取代 31 32 d = {('a','b'):{('A','B'):1,('A','C'):2}, # 字典中最外层作为键的元组的第一个元素作为 33 # 第一行的列索引, 34 ('a','a'):{('A','C'):1,('A','B'):4}, # 第二个元素作为第二行的列索引 35 ('a','c'):{('A','B'):1,('A','C'):6}, # 作为值的字典,将被作为行操作,其中作为键的 36 # 元组第一个元素 37 ('b','a'):{('A','C'):1,('A','B'):8}, # 作为第一例的行索引,第二个元素作为第二列的 38 # 行索引 39 ('b','b'):{('A','D'):1,('A','B'):10}} 40 df = pd.DataFrame(d) 41 42 s = pd.Series(np.random.randn(5), index=['a','b','c','d','e']) 43 pd.DataFrame(s,columns=['A'],index=list('acd')) 44 # 取Series创建的表的一部分(a,c,d) 45 46 df = pd.DataFrame(np.random.randn(6,4),columns=['one','two','three','four']) 47 df['one'] # 在DataFrame中默认取列索引 48 df.loc[1] # 用loc函数取到的是行索引的值 49 df['three'] = df['one']+df['two'] # 通过索引赋值,元表改变,索引值可以相加 50 del df['three'] # 也可以删除索引值 51 df['flag'] = df['one'] > 0.2 # 这是布尔型索引 52 df['five'] = 5 # 对列索引赋单值时,这个列对应的所有行值为所赋的那个值 53 54 s = df.pop('four') # pop函数取出某个列也可以用在DataFram中 55 df.insert(1,'bar',df['one']+df['two']) 56 # 1表示插入在1位置,'bar',插入的列名,df['one']+df['two']为列的值 df改变 57 58 df.assign(Ratio = df['one']/df['two']) 59 # assign函数添加末列其中Ratio表示列索引,df['one']/df['two']为列值 60 # 但是df没有改变 但是df没有改变 但是df没有改变 61 62 df.assign(Ratio = lambda x: x.one-x.two) 63 # x表示整个表,x.one, x.two表示对应的列值 64 65 df.assign(ABRatio = df.one / df.two).assign(BarValue = lambda x: x.ABRatio*x.bar) # 连续assign也可以 66 67 df = pd.DataFrame(np.random.randint(1,10,(6,4)),index=list('abcdef'),columns=list('ABCD')) 68 df['A'] # 列索引取值 69 df.loc['a'] # 行索引取值 70 df.iloc[1] # 通过数值取行索引值 71 df[1:4] # 通过行范围索引取值 72 df.iloc[1:4] # 与df[1:4]效果一样 73 df.A>4 # 判断A列大于4的情况 74 df[df.A>=4] # 索引也可以是表达式,以表的形式返回大于4的值 75 76 df1 = pd.DataFrame(np.random.randn(10,4),index=list('abcdefghij'),columns=['A','B','C','D']) 77 df2 = pd.DataFrame(np.random.randn(7,3),index=list('cdefghi'),columns=['A','B','C']) 78 df1+df2 # 行列索引无法对应的取NaN 79 df1-df1.iloc[0] # DataForm可以与单行相减 80 np.exp(df2) # DataForm可以使用numpy的函数 81 np.sin(df2) 82 df2.values # 返回的是数组 83 84 type(df2.values) 85 # 输出numpy.ndarray 86 87 np.asarray(df2) == df2.values 88 #输出 89 array([[ True, True, True], 90 [ True, True, True], 91 [ True, True, True], 92 [ True, True, True], 93 [ True, True, True], 94 [ True, True, True], 95 [ True, True, True]])