爬虫学习笔记】Pandas:强大的数据处理套件 2"/>
【Python3 爬虫学习笔记】Pandas:强大的数据处理套件 2
DataFrame数据的修改及排序
DataFrame数据的修改
修改DataFrame数据的操作非常简单,只需要把上例中读取的数据项设定为指定值即可。例如,把陈聪明的数学成绩修改为91:
df.ix["陈聪明"]["数学"] = 91
或把陈聪明的所有成绩都改为80:
df.ix["陈聪明", :] = 80
DataFrame数据的排序
Pandas提供了两种DataFrame数据排序功能。
第1种排序功能是根据指定列标题下面的值进行排序,语法为:
数据变量 = df.sort_values(by=列表[, ascending=布尔值])
- 列标题:设置需要以哪一列作为排序依据
- 布尔值:可省略,True表示升序(默认值),False表示降序。
例如,根据数学成绩做降序排序,并把结果存入df1中:
df1 = df.sort_values(by="数学", ascending=False)
第2中排序功能是根据行标题或列标题进行排序,语法为:
数据变量 = df.sort_index(axis=行列值[, ascending=布尔值])
- 行列值:0表示根据行标题排序,1表示根据列标题排序。
例如,按照行标题升序排序,并把结果存至df2中:
df2 = df.sort_index(axis=0)
删除DataFrame数据
Pandas可通过drop()方法删除DataFrame数据,语法为:
数据变量 = df.drop(行标题或列标题[, axis=行列值])
- 行列值:0表示根据行标题排序(默认值),1表示根据列标题排序。
例如,删除陈聪明(行标题)的成绩:
df1 = df.drop("陈聪明") # axis参数可省略
执行结果:
删除数学(列标题)成绩:
df2 = df.drop("数学", axis = 1)
若删除的行或列超过1个,需使用列表作为参数,例如删除数学及自然成绩:
df3 = df.drop(["数学", "自然"], axis=1)
如果删除的列或行项目很多且连续,可使用删除“范围”的方式来处理。删除连续行的语法为:
数据变量 = df.drop(df.index[开始数值:结束数值][,axis=行列值]
执行结果会删除“开始数值”到“结束数值-1”行,例如删除第2行到第4行(陈聪明、黄美丽、熊小娟)的成绩:
df4 = df.drop(df.index[1:4])
删除连续列的语法为:
数据变量 = df.drop(df.columns[开始数值:结束数值][,axis=行列值]
例如,删除第2列到第4列(数学、英文、自然)成绩:
df5 = df.drop(df.columns[1:4], axis=1)
导入数据
有时候,手工生成Pandas的DataFrame数据是件非常麻烦的事情,所以我们通常会先把数据保存在Excel表格或数据库中,然后再把数据导入Pandas。我们还可以直接从网页中抓取表格数据并导入到Pandas中,作为DataFrame数据。
Pandas常用的导入数据方法有:
方法 | 说明 |
---|---|
read_csv | 导入表格型数据(*.csv) |
read_excel | 导入Microsoft Excel型数据(*.xlsx) |
read_sql | 导入SQLite数据库型数据(*.sqlite) |
read_json | 导入Json型数据(*.json) |
read_html | 导入网页中的表数据(*.html) |
Pandas的read_html()方法会用到html5lib包,安装该包:
conda install html5lib
以中国历年GDP数据表为例:
import pandas as pd
tables = pd.read_html(".html")
其中,read_html()方法返回DataFrame列表,列表中的每一个元素是网页中的一个表格。有时候一个网页有多个表格,需要我们以手动方式在网页的源代码中通过"<table"搜索。
import pandas as pd
tables = pd.read_html(".html")
n = 1
for table in tables:print("第 " + str(n) + " 个表格:")print(table.head())print()n += 1
import pandas as pd
tables = pd.read_html(".html")
table = tables[18]
table = table.drop(table.index[[0,1]])
table.columns = ["年份", "M2指标", "GDP绝对额", "M2/GDP"]
table.index = range(len(table.index))
print(table)
更多推荐
【Python3 爬虫学习笔记】Pandas:强大的数据处理套件 2
发布评论