R语言与python对数据框的操作(对比笔记)

2019-07-05 16:19:11 浏览数 (1)

这篇主要比较R语言的data.talbe和python的pandas操作数据框的形式, 学习两者的异同点, 加深理解两者的使用方法。

1. data.table VS pandas

这里使用R语言的data.tablet包和python的pandas进行对比.

主要分为三部分:

    1. 新建数据库
    1. 行列选择
    1. 行列筛选

2. data.table操作数据框

data.table介绍:

使用R语言, 通过data.table创建数据框.

代码语言:javascript复制
library(data.table)
set.seed(123)
DT <- data.table(V1=c(1,2),V2=c("A","B","C"),V3=round(rnorm(4),4), V4=1:12)
2.1 行选择

选择单行

代码语言:javascript复制
# 行选择

DT[2]

DT[2,] # 同上

选择多行

代码语言:javascript复制
DT[3:5]

DT[3:5,]

选择列

代码语言:javascript复制
DT[,2]

可以使用.()号, 返回数据框

代码语言:javascript复制
DT[,.(V2)] # 同上

或者使用list(), 等同于.()

代码语言:javascript复制
DT[,list(V2)]
2.2 行列筛选

选择V2等于A的列

代码语言:javascript复制
DT[V2=="A"]

也可以使用下面这种形式

代码语言:javascript复制
DT[V2=="A",]

如果选择V2等于A或者等于B的列

代码语言:javascript复制
DT[V2 == "A"|V2=="B"]

也可以使用%in%进行多条件选择

代码语言:javascript复制
DT[V2 %in% c("A","B")]

新建一列V5

代码语言:javascript复制
DT[,V5:=V3*V4]

DT
2.3 使用fwrite保存数据
代码语言:javascript复制
fwrite(DT,"DT.csv")

3. pandas操作数据框

读取数据

代码语言:javascript复制
import pandas as pd
df = pd.read_csv("DT.csv")
df
3.1 行列选择

选择第一行, 需要给出区间, df[0]报错, 要用df[0:1]

代码语言:javascript复制
df[0:1] # 如果直接使用, 需要给出区间

也可以根据loc进行提取

代码语言:javascript复制
# loc 根据行名
df.loc[1] # 注意, python从0开始

也可以根据iloc进行提取

代码语言:javascript复制
# iloc 根据行号
df.iloc[1]

注意, iloc是根据行号, loc是根据行名

选择多行

代码语言:javascript复制
df[3:6] # 3包括, 6不包括

同上:

代码语言:javascript复制
df.loc[3:5]
3.2 pandas选择列
代码语言:javascript复制
df["V2"]

也可以使用列数, 使用iloc

代码语言:javascript复制
df.iloc[:,1:2]

如果使用多个列名, 要用[]

代码语言:javascript复制
df[["V1","V2"]] # 用两个[][]

效果同上。

代码语言:javascript复制
df.iloc[:,0:2]
3.3 pandas行列筛选
代码语言:javascript复制
df[df['V2']=="A"]

或者:

代码语言:javascript复制
df[df['V2']=="A"]

多条件筛选

代码语言:javascript复制
# 麻烦style: (df['V2']=='A')|(df['V2']=='B')
df[(df['V2']=='A')|(df['V2']=='B')]

也可以使用isin进行操作:

代码语言:javascript复制
# 使用.V2.isin()进行多条件筛选
df[df.V2.isin(["A","B"])]
代码语言:javascript复制
# 使用[].isin也可以
df[df['V2'].isin(["A","B"])]

创建新列V5

代码语言:javascript复制
df.V5 = df.V3*df.V4
df
3.4 pandas保存文件

如果是R的思维:

代码语言:javascript复制
write.csv(object, "file.csv")

但是pandas的风格是

代码语言:javascript复制
object.to_csv("file.csv")

正确有效的代码:

代码语言:javascript复制
df.to_csv("df.csv",index=0) # 对象.to_csv, 不是pd.write(df,"df.csv")!!!

0 人点赞