前言
本文记录自己使用pandas的常用方法和心得。
一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。特别使用读取csv和excel格式的额文件。
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
work_path = r'C:\Users\sherry\.spyder-py3'
os.chdir(work_path)#改变当前目录到work_path
print(os.getcwd())#打印当前目录
data = pd.read_csv(
'sample_data.csv', encoding = 'utf-8', dtype = {'user_id':str, 'count':int})
print(data.head())
该处地址也可以使用的url向网络请求的数据。
3. 最基本的索引
print(data.columns)#显示列标签
print(data['user_id'])#获取一列
print(data[['count','user_id']])#获取两列,这是用列表形式获取的两列,所以有2层方括号
print(data[1:5])#获取1:4行
print(data[['count','user_id']][1:5])#获取两列,再获取这两列组成的dataframe的1:4行
4. 通过loc函数索引
loc函数定位的是标签(index),不是行的位置。loc函数的第一个参数是对行的操作,第二个参数是对列的操作。
print(data.loc[1:3, ['user_id','count']])#获取行标签为1:3,列标签为'user_id','count'的数据
print(data.loc[data.user_id == '1', ['user_id','count']])#获user_id列中值为'1'的行,列标签为'user_id','count'的数据
print(data.loc[data.buy_mount > 9, ])#获buy_mount > 9的所有行
print(data.loc[(data.buy_mount > 90) | (data.user_id == '1'), ])#获buy_mount > 90或user_id='1'的所有行
iloc函数定位的是行的位置。iloc函数的第一个参数是对行的操作,第二个参数是对列的操作。
print(data.iloc[[1, 6], 0:4])#获取第1行和第六行,0到2列
print(data.iloc[[1, 6], [0, 2]])#获取第1行和第六行,0和2列
5. 增删
列的增加主要使用直接增加法,或者insert()方法,删除列主要使用drop、del方法。 行的删除也可以用drop方法,行的增加可以用append在末尾加入,也有更好的方法。
tmp = data['购买量']
data.insert(0, 'copy购买量', tmp)#在数据中插入一列,名称‘copy购买量’,位置第0列,数字tmp
del data['copy购买量']#删除dataframe中名称为copy购买量的列
data.insert(1, 'copy购买量', tmp)#在数据中插入一列,名称‘copy购买量’,位置第0列,数字tmp
data.insert(0, 'copy购买量1', tmp)#在数据中插入一列,名称‘copy购买量’,位置第0列,数字tmp
data.drop(labels = ['copy购买量', 'copy购买量1'], axis = 1, inplace = True)
#上一行在数据中删除名称为'copy购买量', 'copy购买量1'的列,名称‘copy购买量’,axis = 1表示删除列,axis = 0表示删除行,inplace表示真实删除
print(data.drop(labels = [3, 4], axis = 0, inplace = False))#删除行标签为3和4的行
print(data.drop(labels = range(2, 5), axis = 0, inplace = False))#删除行标签为2到4的行
print(data.append(data))#在df的最后附加行
6. 数据的修改和查找
用rename修改行标签或者列名称。 直接用df.series同==,>,<等逻辑运算符获取满足特定关系的df数据 也可以用between、isin方法获取在之间,匹配某些数量的数据
data.rename(columns = {'user_id':'用户ID'})#用rename修改列标签,使用字典的形式;
data.rename(index = {1:11, 2:22}, inplace = True)#用rename修改行标签,使用字典的形式;
data.loc[data['性别'] == 0, '性别'] = '女性'#将列标签为‘性别’的列中值等于0的元素,改为女性。
data.loc[data['性别'] == 1, '性别'] = '男性'
data.loc[data['性别'] == 2, '性别'] = '未知'
data[data['buy_mount']>80]#获取名称为'buy_mount'列的数据中大于80的数据,会得到所有列
print(data[(data['buy_mount'] < 80) & (data['性别'] == '男性')])
print(data[data['buy_mount'].isin([80, 88, 89, 98])])#buy_mount 列数值属于list[80, 88, 89, 90]的数据
6. 时间日期格式处理
使用df.to_datetime()处理
data.rename(columns = {'user_id':'用户ID'})#用rename修改列标签,使用字典的形式;
data.rename(index = {1:11, 2:22}, inplace = True)#用rename修改行标签,使用字典的形式;
data.loc[data['性别'] == 0, '性别'] = '女性'#将列标签为‘性别’的列中值等于0的元素,改为女性。
data.loc[data['性别'] == 1, '性别'] = '男性'
data.loc[data['性别'] == 2, '性别'] = '未知'
data[data['buy_mount']>80]#获取名称为'buy_mount'列的数据中大于80的数据,会得到所有列
print(data[(data['buy_mount'] < 80) & (data['性别'] == '男性')])
print(data[data['buy_mount'].isin([80, 88, 89, 98])])#buy_mount 列数值属于list[80, 88, 89, 90]的数据
总结
提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
|