8、Python 机器学习基础知识Pandas库中的DataFrom(二)

DataFrom

DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。(有人把 DataFrame 翻译为“数据框”,是不是还可以称之为“筐”呢?向里面装数据嘛。)
在这里插入图片描述

定义方式:

1、DataFrame 最基本的定义方式:

data = {'name':['yahoo','google','facebook'],'marks':[200,100,300],'price':[9,3,7]}
f1 = DataFrame(data)
print(f1)

输出:
       name  marks  price
0     yahoo    200      9
1    google    100      3
2  facebook    300      7

这是定义一个 DataFrame 对象的常用方法——使用 dict 定义。字典的“键”(“name”,“marks”,“price”)就是 DataFrame 的 columns 的值(名称),字典中每个“键”的“值”是一个列表,它们就是那一竖列中的具体填充数据。上面的定义中没有确定索引,所以,按照惯例(Series 中已经形成的惯例)就是从 0 开始的整数。从上面的结果中很明显表示出来,这就是一个二维的数据结构(类似 excel 或者 mysql 中的查看效果)。

上面的数据显示中,columns 的顺序没有规定,就如同字典中键的顺序一样,但是在 DataFrame 中,columns 跟字典键相比,有一个明显不同,就是其顺序可以被规定,向下面这样做:

f2 = DataFrame(data, columns=['name','price','marks']) 
print (f2)
 
输出:
       name  price  marks
0     yahoo      9    200
1    google      3    100
2  facebook      7    300

DataFrame 数据的索引也能够自定义。

f3 = DataFrame(data, columns=['name', 'price', 'marks', 'debt'], index=['a','b','c']) 
print (f3) 

输出
        name  price  marks debt
a     yahoo      9    200  NaN
b    google      3    100  NaN
c  facebook      7    300  NaN

因为定义f3的时候,多了一个键值debt,但是这项在 data 这个字典中并没有,所以 debt 这一竖列的值都是空的,在 Pandas 中,空就用 NaN 来代表了。

1、DataFrame 使用字典套字典的方式:

newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}

f4 = DataFrame(newdata)
print(f4)

输出:
              lang   price
firstline   python  8000.0
secondline    java     NaN

在字典中就规定好数列名称(第一层键)和每横行索引(第二层字典键)以及对应的数据(第二层字典值),也就是在字典中规定好了每个数据格子中的数据,没有规定的都是空。

如果额外确定了索引,除非在字典中有相应的索引内容,否则都是 NaN,如下:

print(DataFrame(newdata, index=["firstline","secondline","thirdline"]) )

输出:
              lang     price 
firstline     python   8000 
secondline    java     NaN 
thirdline     NaN      NaN 

属性和方法:

columns :

columns 属性能够显示所有的 columns 名称

print(f3.columns )

输出:
Index(['name', 'price', 'marks', 'debt'], dtype=object) 

还能用下面类似字典的方式,得到某竖列的全部内容(当然也包含了索引):

peint( f3['name'] )

输出:
a       yahoo
b      google
c    facebook
Name: name, dtype: object

给某一列直接赋值

f3['debt'] = 89.2 

输出:
       name  price  marks  debt
a     yahoo      9    200  89.2
b    google      3    100  89.2
c  facebook      7    300  89.2

除了能够统一赋值之外,还能够“点对点”添加数值,自动对齐之后,没有被复制的依然保持 NaN

sdebt = Series([2.2,1.1],index=('a','b'))
f3['debt'] = sdebt
print(f3)

输出:
       name  price  marks  debt
a     yahoo      9    200   2.2
b    google      3    100   1.1
c  facebook      7    300   NaN

还可以更精准的修改数据吗?当然可以,完全仿照字典的操作:

f3["price"]["c"] = 1000
print(f3)

输出:
       name  price  marks  debt
a     yahoo      9    200   2.2
b    google      3    100   1.1
c  facebook   1000    300   NaN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值