import numpy as np
import pandas as pd
from pandas import DataFrame

# DataFrame是一个表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等),
# DataFrame既有行索引又有列索引,它可以被看做由Series组成的字典

#1.可以通过直接传入一个由等长的列表或Numpy数组组成的字典构建一个DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year': [2000, 2000, 2001, 2002, 2001],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
print(frame)

#2.如果指定了列序列,则DataFrame的列会按照指定序列进行排列
print(DataFrame(data, columns=['year', 'state', 'pop']))

#3.跟Series一样,如果传入的列在数据中找不到,就会产生NA值
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
print(frame2)

#4.通过类似字典标记或属性的方式,可以将DataFrame的列获取一个Series,
#注意,返回的Series拥有原DataFrame相同的索引,且其name属性也被相应设置好了
print(frame2['state'])
print(frame2.year)

#5.DataFrame中的行也可以通过位置或名称的方式获取,比如通过索引字段ix:
print(frame2.ix['three'])

#6.列可以通过赋值的方式直接修改,我们可以那个空的"debt"赋上一个标量或者一组值,
#将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配
frame2['debt'] = 16.5
print(frame2)
frame2['debt'] = np.arange(5.)
print(frame2)
frame2['debt'] = [11, 22, 33, 44, 55]
print(frame2)

#7.也可以对frame2中没有的键进行赋值,例如对frame2中的debt1键进行赋值,DataFrame会自动增加一个debt1键
frame2['debt1'] = 16.8
print(frame2)

#8.如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位置都会被填上缺失值
val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame2['debt1'] = val
print(frame2)

#9.为不存在的列赋值会创建一个新列,关键字del用于删除列
frame2['eastern'] = frame2.state == 'Ohio'
print(frame2)
del frame2['eastern']
print(frame2.columns)
#通过索引方式返回的列只是相应数据的视图,并不是副本.因此,对返回的Series所做的任何就地修改全都会反映到源DataFrame.通过Series的copy方法
#即可显示的复制列

#10.嵌套字典(字典中的字典),外层字典的键作为列,内层键作为行索引
pop = {'Nevada':{2001: 2.4, 2002: 2.9}, 'Ohio':{2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop)
print(frame3)

#11.可以对结果进行转置,内层字典的键会被合并,排序以形成最终的索引
print(frame3.T)
#如果显示指定索引,怎不会这样
print(DataFrame(pop, index=[2001, 2002, 2003]))

#12.如果设置了DataFrame的index和columns的name属性,则这些信息也可以被显示出来
print('*****************')
frame3.index.name = 'year'
frame3.columns.name = 'state'
print(frame3)

#13.跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据
print('*****************')
print(frame3.values)

#14.如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型
print(frame2.values)

  另外, pandas的构造器可以输入如下类型的数据:

                                              

python中dataframe对应如何搜索_赋值