这篇主要比较R语言的data.talbe和python的pandas操作数据框的形式, 学习两者的异同点, 加深理解两者的使用方法。
1. data.table VS pandas
这里使用R语言的data.table
t包和python的pandas
进行对比.
主要分为三部分:
-
- 新建数据库
-
- 行列选择
-
- 行列筛选
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%
进行多条件选择
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]
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]
如果使用多个列名, 要用[]
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")!!!