关于DataFrame数据的查询和编辑
作者:瑞雪兆丰年(润 )
在使用pandas处理DataFrame时,可通过列索引标签获取列数据,行数据的获取可以利用行索引或位置切片,如iloc和loc方法,增加数据时,可通过append方法增加行,直接赋值增加列,删除数据则通过drop方法,通过设置axis参数确定是删除行还是列
(不少于4个代码案例,选取行,选取列,增加行,删除行)
查询【一般都是通过索引来操作的】
1.选取列
通过列索引标签或者属性的方式可以单独获取DataFrame的列数据,返回数据类型为Series。
在选取列时不能使用切片的方式,超过一个列名用df[['列名1','列名2']]
# 选取列 import pandas as pd import numpy as np data = { 'name':[杨大润','李玉芳','马庆显'], 'age':[21,19,23], 'address':['兰州','上海','北京'] } df = pd.DataFrame(data) print(df) w1 = df['name'] print("以列名取一列数据:\n", w1) w2 = df[['name','age']] print("以列名取两份数据:\n", w2)
2.选取行
通过行索引或者行索引位置切片形式获取行数据【从0开始的,左闭右开】。
DataFrame提供的head【开头开始】和tail【结尾】可以取连续多行数据,sample可以随机抽取并显示数据
# 取行 从0开始的 import pandas as pd data = { 'name':['杨大润','李玉芳','马庆显'], 'age':[21,19,23], 'address':['贵州','上海','北京'] } df = pd.DataFrame(data) print(df) print('显示前两行:\n', df[:2]) print('显示2行:\n', df[1:2]) # head从第一行取,默认前五行 print(df.head()) print(df.head(1)) # tail默认最后五行 可以带数字取最后的 print(df.tail()) print(df.tail(1)) # sample随机抽取n行显示 print(df.sample(1))
3.读取行和列
切片选取行限制比较大,取单独的几行数据可以采用Pandas提供的iloc和loc方法实现。
用法:
- DataFrame.loc(行索引位置, 列索引位置)
- DataFrame.loc(行索引名称或条件, 列索引名称)
# loc import pandas as pd import numpy as np data = { 'name':['杨将军(大润)', '李女将(玉芳)', '马(军师)庆显', '韦女将(思妍)', '徐大将(佳宇)'], 'location':['游走', '下路', '打野', '中单', '上单'], 'dynasty':['蜀', '蜀', '战国', '汉', '蜀'], 'year':[1999, 2000, 2020, 2050, 3030] } df1 = pd.DataFrame(data, columns=['name','location','dynasty','address','year'],index=['a','b','c','d','e']) df2 = df1.set_index('dynasty') print(df2) print("取name和year两列的数据:\n",df2.loc[:,['name','year']]) print("取汉,战国行中name,year的数据:\n",df2.loc[['汉','战国'],['name','year']])
4.增加数据
增加一行通过append方法传入字典结构数据即可,增加列时为增加的列赋值即可创建一个新的列,具体给值要对应,不然会报错
#插入一行数据append #加列并赋值 import pandas as pd import numpy as np data = { 'name':['杨将军(大润)', '李女将(玉芳)', '马(军师)庆显', '韦女将(思妍)', '徐大将(佳宇)'], 'location':['游走', '下路', '打野', '中单', '上单'], 'dynasty':['蜀', '蜀', '战国', '汉', '蜀'], 'year':[1999, 2000, 2020, 2050, 3030] } df1 = pd.DataFrame(data, columns=['name','location','dynasty','address','year'],index=['0','1','2','3','4']) df1['C'] = 10 df1['age'] = [24,33,19,40,80] data1 = { 'name':'吴医师(宗蔚)', 'location':'打野', 'dynasty':'唐', 'year':1909 } df1.append(data1,ignore_index=True) print(df1) print(df1.append(data1,ignore_index=True))
5.删除行和列
删除数据直接用drop方法,行列数据通过axis参数设置默认为0删除行,1删除列。
默认数据删除不修改原数据,如果在原数据上删除加入参数inplace=True即可!
import numpy as np import pandas as pd df = pd.DataFrame(data=[['杨大润', '男', 22], ['李玉芳', '女', 18], ['韦思妍', '女', 18], ['马庆显', '男', 23], ['徐佳宇', '女', 18], ['吴宗蔚', '女', 21]], index=[1, 2, 3, 4, 5, 6], columns=['name', 'sex', 'age']) # 测试数据。 print(df) h=df.drop([1,3],axis = 0,inplace = False) #删除index值为1和3的两行, print(h) l=df.drop(['name'],axis = 1,inplace = False) #删除name列。 print(l)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。