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