构造
import pandas as pd
import numpy as np
index = [9, 5, 7]
columns = ['a', 'y', 'g']
data = []
for step in range(1, 10, 3):
temp = [step, step + 1, step + 2]
data.append(temp)
data = np.array(data)
data = pd.DataFrame(index=index, columns=columns, data=data)
print(data)
'''
a y g
9 1 2 3
5 4 5 6
7 7 8 9
'''
具体也不用再说,np.array==>pd.Series==>pd.DataFrame。
能够知道怎么拆散和组装就足够了,更细节就是别的事情了。
当然,也可以从文件中直接读取
import pandas as pd
'''
文本数据
a,b,c
1,2,3
9,8,7
'''
data = pd.read_csv('data2.csv')
'''
打印
a b c
0 1 2 3
1 9 8 7
'''
特征
从上面的构造就能够知道,dagaFrame有三大部分
- index
- columns
- data
就我看来,其实就分为两个部分
- 坐标
- 数据
前面两个,就是坐标了。数据肯定是单独的。
dataFrame作为一个数据结构,pandas有丰富的方法对它进行各种操作,单最关键的,在于对这个结构的深刻理解。
对于坐标的理解和对于数据分布的理解。
数据
对于数据的理解,在于赋予数据一个实在的含义,便于理解和分类。
dataFrame粗略的可以看做二维数组,但是却赋予了更加深刻的含义。
二维数组当中,仅考虑到了一级的分组,也就是作为样本的可能性,区别于其他组而具有特殊含义,但是对于组内的各种数据,之间没有相互的关联。
单单从index的角度来看,这两者是等价的。
而columns,把单个样本对应的值相互串联,就产生了新的时机含义:每个样本对应的参数值----属性。
从研究的角度来看,钻研一个东西,莫过于“定性”,从各方面的角度来进行综合的衡量,从而划分种类和描绘差异。
多个维度的参考,就是各种属性的杂合,从而组成了各类事物。
不论是动物、植物,都是如此定义。
如果把每个属性都当做一个坐标轴的话,在坐标轴上绘出位置,那么,所谓的同一类,也都是在指定的区间内。
相近的,相似的,都是相邻范围内的东西。
计算机的学习任务,也就是对这种高维度空间区域范围的划分而得来的分类和识别。
对应到dataFrame中,也就是基本的样本(index)和属性(columns)。
一个样本,必然杂合多个属性。
一个属性,也会涉及多个样本。
坐标
坐标这东西,总体来看或许有很多含义,而在dataFrame中,也就是取数的操作而已,但是十分关键。
取属性列表,取单一属性,取样本数据,取单样本,或许后面的操作得出的结果更有实在意义,不过熟悉基础会事半功倍。
取数
同上,绚丽的操作是后话,dataFrame本身注重的还是数据的存储和获取,一般的数据也早就有了,关注一下取数吧。
index,columns,head,tail这些方法就不说了,都是能直接上手的,现在主要探究一下训练过程中一般取数的差别。
基本数据
import pandas as pd
import numpy as np
index = ['a', 'b', 'c']
columns = ['x', 'y', 'z']
data = []
for step in range(1, 10, 3):
temp = [step, step + 1, step + 2]
data.append(temp)
data = np.array(data)
data = pd.DataFrame(index=index, columns=columns, data=data)
'''
x y z
a 1 2 3
b 4 5 6
c 7 8 9
'''
单属性
print(data['x'])
'''
a 1
b 4
c 7
'''
属性集合
print(data[['x', 'z']])
'''
x z
a 1 3
b 4 6
c 7 9
'''
定点样本
print(data.loc['a'])
# 报错
# print(data.loc[0])
# 报错
# print(data.iloc['a'])
print(data.iloc[0])
print(data.ix[0])
print(data.ix['a'])
'''
x 1
y 2
z 3
Name: a, dtype: int32
x 1
y 2
z 3
Name: a, dtype: int32
x 1
y 2
z 3
Name: a, dtype: int32
x 1
y 2
z 3
Name: a, dtype: int32
loc : 针对的是dataFrame自身的index
iloc: 针对的是dataFrame样本的数据顺序
ix : 无节操,无论对于指定的index或者数据顺序,都可以直接采用,不会报错
一般文本添加数据都会自动加上自然数index,如果不确定,最保险用ix
'''
样本切片
print(data.loc['a':'b'])
# 报错
# print(data.loc[0])
# 报错
# print(data.iloc['a'])
print(data.iloc[0:1])
print(data.ix[0:1])
print(data.ix['a':'b'])
'''
x y z
a 1 2 3
b 4 5 6
x y z
a 1 2 3
x y z
a 1 2 3
x y z
a 1 2 3
b 4 5 6
可以看到,一般的数字索引切片都是包头不包尾,而指定缩影切片都会加入其中
'''
样本集合
print(data.loc[['a', 'b']])
# 报错
# print(data.loc[0])
# 报错
# print(data.iloc['a'])
print(data.iloc[[0, 1]])
print(data.ix[[0, 1]])
print(data.ix[['a', 'b']])
'''
x y z
a 1 2 3
b 4 5 6
x y z
a 1 2 3
b 4 5 6
x y z
a 1 2 3
b 4 5 6
x y z
a 1 2 3
b 4 5 6
把定点的单索引,直接替换成指定索引列表,即可提取多个指定数据
'''
双指定
print(data.loc[['a', 'b'], 'x'])
print(data.iloc[[0, 1], 0:1])
# 报错
# print(data.iloc[[0,1], 'x':'y'])
print(data.ix[0:1, ['x', 'y']])
print(data.ix['a':'b', 'x':'y'])
'''
a 1
b 4
Name: x, dtype: int32
x
a 1
b 4
x y
a 1 2
x y
a 1 2
b 4 5
1. 双管齐下,可以同时对行(index)和列(columns)进行操作
2. 数字切片,包头不包尾
3. iloc注定数字一生
'''
索引是数字
import pandas as pd
data = pd.read_csv('data2.csv')
print(data)
'''
a b c
0 1 2 3
1 9 8 7
'''
print(data.iloc[0:1])
'''
a b c
0 1 2 3
数字索引注定是包头不包尾了
'''
总结一下
- 直接中括号可以取属性值
- 取数有三种:单值,多点,切片
- loc,iloc,ix支持单和双两种维度操作
- loc只能索引
- iloc只能序列
- ix支持两种
- 数字索引包头不包尾