# 11.21 DataFrame入门
# coding:utf-8
import numpy as np
import pandas as pd
#先创建一个时间索引,所谓的索引(index)就是每一行数据的ID,可以标识每一行的唯一值
dates = pd.date_range('20171121',periods=6)
print dates
# DatetimeIndex(['2017-11-21', '2017-11-22', '2017-11-23',
# '2017-11-24','2017-11-25', '2017-11-26'],dtype='datetime64[ns]', freq='D')
#为了快速入门,我们看一下如何创建一个6X4的数据:randn函数用于创建随机数,参数标示行数和
#列数,dates是上一步创建的索引列
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print df
# A B C D
#2017-11-21 1.199444 -0.587739 -1.284239 0.628793
#2017-11-22 0.284111 -1.659375 0.614215 0.359175
#2017-11-23 1.445404 1.354422 -1.065202 0.293943
#2017-11-24 1.134573 0.723428 -1.240231 1.006472
#2017-11-25 2.091592 0.615116 0.420853 -0.394245
#2017-11-26 0.964422 -0.840615 0.810898 -0.150593
#我们还可以使用字典来创建数据框,例如创建一个名为A的数据框,索引是自动创建的整数
df2 = pd.DataFrame({'A':np.random.randn(6),})
print df2
# A
#0 -1.167953
#1 1.991190
#2 -0.153903
#3 1.872350
#4 0.373224
#5 0.374733
#这又是一个字典创建DataFrame的例子
df2 = pd.DataFrame({'A':pd.Timestamp('20171121'),
'B':pd.Series(1),
})
print df2
# A B
#0 2017-11-21 1
#假如字典内的数据长度不同,以最长的数据为准,比如B列有4行:
df2 = pd.DataFrame({'A':pd.Timestamp('20171121'),
'B':pd.Series(1,index=list(range(4))),
})
print df2
# A B
#0 2017-11-21 1
#1 2017-11-21 1
#2 2017-11-21 1
#3 2017-11-21 1
#可以用dtypes来查看各行的数据格式
print df2.dtypes
#A datetime64[ns]
#B int64
#dtype: object
#接着看一下如何查看数据框中的数据,看一下所有的数据
print df
#使用head查看前几行数据(默认是前五行),不过可以指定前几行
print df.head(3)
#用tail查看后5行数据
print df.tail(5)
#查看数据框的索引
print df.index
#DatetimeIndex(['2017-11-21', '2017-11-22', '2017-11-23', '2017-11-24',
# '2017-11-25', '2017-11-26'],
# dtype='datetime64[ns]', freq='D')
#查看列名用columns
print df.columns
# Index([u'A', u'B', u'C', u'D'], dtype='object')
#查看数据值,用values
print df.values
#[[ 5.18549548e-01 2.51793323e-01 -4.96886555e-01 1.18048148e+00]
# [ -9.80442170e-01 5.16076095e-01 7.49757089e-01 -6.17529673e-01]
# [ 4.19993331e-01 1.74598959e+00 4.17248712e-01 2.00993751e+00]
# [ -9.87024726e-01 -6.67183444e-01 -5.76521982e-01 -1.04220119e+00]
# [ 3.48839229e+00 7.11357212e-01 2.80479898e-01 -5.16312176e-01]
# [ -1.21444574e-01 -4.36551837e-01 -2.06880157e-03 7.98377457e-01]]
#查看描述性统计,用describe
print df.describe()
# A B C D
# count 6.000000 6.000000 6.000000 6.000000
# mean 0.494768 -0.289230 -0.691272 0.077464
# std 0.795101 1.023312 1.179278 0.597368
# min -0.444882 -1.608934 -2.040045 -0.940735
# 25% -0.158582 -1.108450 -1.487883 -0.179147
# 50% 0.607086 0.150558 -0.621352 0.260434
# 75% 0.890417 0.223112 -0.442241 0.498407
# max 1.628264 0.853263 1.294381 0.632596
#使用type看一下输出的描述性统计是什么样的数据类型--DataFrame数据
print type(df.describe())
#
#使用T来转置数据,也就是行列转换
print df
print '*********************************'
print df.T
# A B C D
# 2017-11-21 0.790538 0.277089 -0.995001 -0.237508
# 2017-11-22 -0.069511 -0.290848 0.044261 -0.451401
# 2017-11-23 2.485684 -1.577795 -0.620553 1.593358
# 2017-11-24 1.657990 -1.496158 0.826737 -1.676031
# 2017-11-25 0.506889 -0.986407 1.531662 -0.517018
# 2017-11-26 -0.162784 1.027782 -1.411437 0.084066
# *********************************
# 2017-11-21 2017-11-22 2017-11-23 2017-11-24 2017-11-25 2017-11-26
# A 0.790538 -0.069511 2.485684 1.657990 0.506889 -0.162784
# B 0.277089 -0.290848 -1.577795 -1.496158 -0.986407 1.027782
# C -0.995001 0.044261 -0.620553 0.826737 1.531662 -1.411437
# D -0.237508 -0.451401 1.593358 -1.676031 -0.517018 0.084066
#对数据进行排序,用到了sort
print df.sort_values