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]])