In [24]: s4[s4 > 9000]
Out[24]:
数学 9001.0
dtype: float64
Series就先简要写到这,下面看pandas的另一种数据结构DataFrame.
DataFrame
DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。
首先来导入模块
In [27]: from pandas import Series,DataFrame
In [26]: data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
In [28]: f1 = DataFrame(data)
In [29]: f1
Out[29]:
marks name price
0 100 google 1
1 200 baidu 2
2 300 yahoo 3
这是定义一个 DataFrame 对象的常用方法——使用 dict 定义。字典的“键”("name","marks","price")就是 DataFrame 的 columns 的值(名称),字典中每个“键”的“值”是一个列表,它们就是那一竖列中的具体填充数据。上面的定义中没有确定索引,所以,按照惯例(Series 中已经形成的惯例)就是从 0 开始的整数。从上面的结果中很明显表示出来,这就是一个二维的数据结构(类似 excel 或者 mysql 中的查看效果)。
上面的数据显示中,columns 的顺序没有规定,就如同字典中键的顺序一样,但是在 DataFrame 中,columns 跟字典键相比,有一个明显不同,就是其顺序可以被规定,向下面这样做:
In [31]: f2 = DataFrame(data,columns=['name','price','marks'])
In [32]: f2
Out[32]:
name price marks
0 google 1 100
1 baidu 2 200
2 yahoo 3 300
跟 Series 类似的,DataFrame 数据的索引也能够自定义
In [35]: f3 = DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
In [36]: f3
Out[36]:
name marks price
a google 100 1
b baidu 200 2
c yahoo 300 3
定义 DataFrame 的方法,除了上面的之外,还可以使用“字典套字典”的方式。
In [40]: newdata = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
In [41]: f4 = DataFrame(newdata)
In [42]: f4
Out[42]:
lang price
first python 5000
second java 2000
在字典中就规定好数列名称(第一层键)和每横行索引(第二层字典键)以及对应的数据(第二层字典值),也就是在字典中规定好了每个数据格子中的数据,没有规定的都是空。
DataFrame 对象的 columns 属性,能够显示素有的 columns 名称。并且,还能用下面类似字典的方式,得到某竖列的全部内容(当然包含索引):
>>> newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}
>>> f4 = DataFrame(newdata)
>>> f4
lang price
firstline python 8000
secondline java NaN
>>> DataFrame(newdata, index=["firstline","secondline","thirdline"])
lang price
firstline python 8000
secondline java NaN
thirdline NaN NaN
DataFrame 对象的 columns 属性,能够显示素有的 columns 名称。并且,还能用下面类似字典的方式,得到某竖列的全部内容(当然包含索引):
In [44]: f3['name']
Out[44]:
a google
b baidu
c yahoo
Name: name, dtype: object
下面操作是给同一列赋值
newdata1 = {'username':{'first':'wangxing','second':'dadiao'},'age':{'first':24,'second':25}}
In [67]: f6 = DataFrame(newdata1,columns=['username','age','sex'])
In [68]: f6
Out[68]:
username age sex
first wangxing 24 NaN
second dadiao 25 NaN
In [69]: f6['sex'] = 'man'
In [70]: f6
Out[70]:
username age sex
first wangxing 24 man
second dadiao 25 man
也可以单独的赋值,除了能够统一赋值之外,还能够“点对点”添加数值,结合前面的 Series,既然 DataFrame 对象的每竖列都是一个 Series 对象,那么可以先定义一个 Series 对象,然后把它放到 DataFrame 对象中。如下:
ssex = Series(['男','女'],index=['first','second'])
In [72]: f6['sex'] = ssex
In [73]: f6
Out[73]:
username age sex
first wangxing 24 男
second dadiao 25 女
还可以更精准的修改数据吗?当然可以,完全仿照字典的操作:
In [74]: f6['age']['second'] = 30
In [75]: f6
Out[75]:
username age sex
first wangxing 24 男
second dadiao 30 女
参考http://wiki.jikexueyuan.com/project/start-learning-python/312.html所整理。