Python VS R | 增删查改数据框

在Python和R中,数据框可谓是使用最频繁的数据结构之一。但二者对于数据框的操作是存在一定差异的,稍加不注意,就容易弄混,今天就对此进行总结。
在这里插入图片描述

一、数据框创建

  • Python
import pandas as pd
data = pd.DataFrame({'name':['张三','李四','王五'],
             'gender':['男','男','女'],
             'age':[19,18,18],
             'major':['统计学','经济学','心理学']})                 
  • R
#注意:R读取数据框时,会自动将字符型数据读为因子型数据!所以,这里将stringsASFactors参数设为False
data<-data.frame(name=c("张三","李四","王五"),
                 gender=c("男","男","女"),
                 age=c(19,18,18),
                 major=c("统计学","经济学","心理学"),
                 stringsAsFactors=FALSE)

补充一个实用小技巧:在实际分析中,我们通常会对相同数据框进行批量合并处理。那么一开始就必须创建一个空白数据框,然后通过循环不断往里填数据。这里以data数据集为例,复制三次其内容,组成一个新的数据框。

  • Python

concat函数默认列方向进行合并,若想横向合并可设置axis=1

all_data = pd.DataFrame()  #创建空白数据框
for i in range(3):
    all_data = pd.concat([all_data,data],ignore_index=True)  #ignore_index参数使得合并索引从0开始
print(all_data)

在这里插入图片描述

  • R

R中有点不同,必须先创建一个矩阵,再将其转为数据框,才能往内部填数据!

all_data<-data.frame(matrix(0,0,0))
for(i in seq(3)){
  all_data=rbind(all_data,data)
}
print(all_data)

在这里插入图片描述

二、查看数据框基本信息

  • Python
#1、查看各数据字段类型
data.info()

#2、查看索引
data.index

#3、查看列名
data.columns

在这里插入图片描述

  • R
#1、查看各字段类型
str(data)

#2、查看索引
rownames(data)

#3、查看列名(这里也可以用names)
colnames(data)
names(data)

在这里插入图片描述

三、增减列字段

  • Python
data["class"] = ['一班','一班','二班'] #添加class列
data = data.drop(columns=['gender']) #删除gender列
data

在这里插入图片描述

  • R

R中添加字段主要是通过美元符号$进行的

#增加class列
data$class<-c("一班","一班","二班")

#删除class和gender列
del_col<-names(data)%in%c("class","gender") # a%in%b表示: 判断a是否在b中,是则返回TRUE
data[!del_col] #!代表非

在这里插入图片描述

四、数据筛选

4.1 单条件筛选

  • Python
#筛选单列
print(data["gender"])
print(data.loc[:,'gender'])
print(data.iloc[:,1])

#筛选多列(注意,python索引是从0开始)
print(data[["name","gender","major"]])
print(data.loc[:,["name","gender","major"]])
print(data.iloc[:,[0,1,3]])

在这里插入图片描述

  • R

注意:在R中进行筛选时美元符号等价双括号,二者返回的都是向量。而括号筛选返回的是数据框!

#筛选gender列,注意前三种返回的都是向量,最后一种返回数据框!
data$gender 
data[["gender"]]  
data[,2]  #R索引是从1开始的!

data["gender"]  #返回数据框

在这里插入图片描述

4.2 多条件筛选

筛选出性别为男性,年龄为18岁的学生数据

  • Python

Python中常用的组合筛选有两种:一是data[(条件一)&(条件二)&...(条件n)];二是query函数,基本用法为data.query('条件1 & 条件2 & ... &条件n')

#方法一,注意不同条件之间一定要用圆括号括起来!!!
print(data[(data['gender']=='男')&(data['age']==18)])

#方法二
print(data.query("gender == '男' & age ==18"))

在这里插入图片描述

  • R

与Python类似,R中也有两种常用的组合筛选方式。一是data[条件1&条件2&..,c("column1","column2",..)](这里各条件之间可以不用小括号);二是subset函数,基本用法为subset(data,subset=条件1&条件2&..),select=c("column1","column2",..)

data[data$gender=="男" & data$age==18,c("name","gender","age","major")]

subset(data,
       subset = data$gender=="男" & data$age==18 ,
       select=c("name","gender","age","major"))

在这里插入图片描述
以上为本次分享的全部内容~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Flask 架进行开发时,我们通常会使用 ORM 工具来进行数据库操作。常用的 ORM 工具有 SQLAlchemy 和 Peewee。这里以 SQLAlchemy 为例,介绍如何封装 MySQL 的增删查改操作。 首先,我们需要在 Flask 中初始化 SQLAlchemy: ```python from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:password@host/db_name' db = SQLAlchemy(app) ``` 接下来,我们可以定义一个基础的 Model 类,所有的数据模型都继承自它: ```python class BaseModel(db.Model): __abstract__ = True id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) ``` 这里的 BaseModel 类定义了一个 id 字段和两个时间戳字段,所有的数据模型都会继承这些字段。 接着,我们可以定义一个封装了增删查改操作的基础 Repository 类: ```python class BaseRepository: model = None @classmethod def add(cls, data): db.session.add(data) db.session.commit() @classmethod def delete(cls, data): db.session.delete(data) db.session.commit() @classmethod def find(cls, **kwargs): return cls.model.query.filter_by(**kwargs).first() @classmethod def find_all(cls, **kwargs): return cls.model.query.filter_by(**kwargs).all() @classmethod def update(cls, data): db.session.commit() ``` 这里的 BaseRepository 类定义了 add、delete、find、find_all 和 update 五个方法,分别对应了增、删、查、查全部和改操作。这些方法都是基于 SQLAlchemy 提供的 API 进行封装的。 最后,我们可以定义一个具体的 Repository 类,继承自 BaseRepository,并指定对应的 model: ```python class UserRepository(BaseRepository): model = User ``` 这里的 UserRepository 类继承了 BaseRepository 类,并指定了 model 为 User。这样,我们就可以通过 UserRepository 类来进行 User 数据模型的增删查改操作了。 ```python user = User(name='John') UserRepository.add(user) user = UserRepository.find(name='John') user.name = 'Tom' UserRepository.update(user) UserRepository.delete(user) users = UserRepository.find_all() ``` 以上就是一个简单的 MySQL 增删查改操作的封装示例。在实际开发中,我们可以根据具体的需求对 Repository 类进行拓展,并且可以结合 Flask 的 Blueprint 等功能来进行模块化的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值