pandas取数

版权声明:来一来,看一看,有钱的捧个人场,没钱的你不得捧个人场 https://blog.csdn.net/wait_for_eva/article/details/81913950

构造

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有三大部分

  1. index
  2. columns
  3. data

就我看来,其实就分为两个部分

  1. 坐标
  2. 数据

前面两个,就是坐标了。数据肯定是单独的。

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

数字索引注定是包头不包尾了
'''

总结一下

  1. 直接中括号可以取属性值
  2. 取数有三种:单值,多点,切片
  3. loc,iloc,ix支持单和双两种维度操作
  4. loc只能索引
  5. iloc只能序列
  6. ix支持两种
  7. 数字索引包头不包尾

猜你喜欢

转载自blog.csdn.net/wait_for_eva/article/details/81913950
今日推荐