在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"))
以上为本次分享的全部内容~