本文共 2620 字,大约阅读时间需要 8 分钟。
DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。(有人把 DataFrame 翻译为“数据框”,是不是还可以称之为“筐”呢?向里面装数据嘛。)
data = {'name':['yahoo','google','facebook'],'marks':[200,100,300],'price':[9,3,7]}f1 = DataFrame(data)print(f1)输出: name marks price0 yahoo 200 91 google 100 32 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 marks0 yahoo 9 2001 google 3 1002 facebook 7 300
DataFrame 数据的索引也能够自定义。
f3 = DataFrame(data, columns=['name', 'price', 'marks', 'debt'], index=['a','b','c']) print (f3) 输出 name price marks debta yahoo 9 200 NaNb google 3 100 NaNc facebook 7 300 NaN
因为定义f3的时候,多了一个键值debt,但是这项在 data 这个字典中并没有,所以 debt 这一竖列的值都是空的,在 Pandas 中,空就用 NaN 来代表了。
newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}f4 = DataFrame(newdata)print(f4)输出: lang pricefirstline python 8000.0secondline java NaN
在字典中就规定好数列名称(第一层键)和每横行索引(第二层字典键)以及对应的数据(第二层字典值),也就是在字典中规定好了每个数据格子中的数据,没有规定的都是空。
如果额外确定了索引,除非在字典中有相应的索引内容,否则都是 NaN,如下:
print(DataFrame(newdata, index=["firstline","secondline","thirdline"]) )输出: lang price firstline python 8000 secondline java NaN thirdline NaN NaN
columns 属性能够显示所有的 columns 名称
print(f3.columns )输出:Index(['name', 'price', 'marks', 'debt'], dtype=object)
还能用下面类似字典的方式,得到某竖列的全部内容(当然也包含了索引):
peint( f3['name'] )输出:a yahoob googlec facebookName: name, dtype: object
给某一列直接赋值
f3['debt'] = 89.2 输出: name price marks debta yahoo 9 200 89.2b google 3 100 89.2c facebook 7 300 89.2
除了能够统一赋值之外,还能够“点对点”添加数值,自动对齐之后,没有被复制的依然保持 NaN
sdebt = Series([2.2,1.1],index=('a','b'))f3['debt'] = sdebtprint(f3)输出: name price marks debta yahoo 9 200 2.2b google 3 100 1.1c facebook 7 300 NaN
还可以更精准的修改数据吗?当然可以,完全仿照字典的操作:
f3["price"]["c"] = 1000print(f3)输出: name price marks debta yahoo 9 200 2.2b google 3 100 1.1c facebook 1000 300 NaN
转载地址:http://ukesi.baihongyu.com/