Datawhale-Pandas-Task02-Pandas基础

文件的读写

pandas集成了很多文件格式的读写,R中除了文本格式,其他格式都分散在各种包中,pandas使用体验更好一点。

另外,R的read.csv读取数据是,默认stringsAsFactors = TRUE,这个我认为是体验不太好的地方,好在4.0版本开始修改默认为FALSE

强烈推荐R中的一个神级包data.table,对大数据的读写有超高的效率,Python中也实现了类似的包,datatable

格式 Python读 Python写 R读 R写
CSV pd.read_csv pd.to_csv read.csv
data.table::fread
write.csv
data.table::fwrite
TXT pd.read_table pd.to_csv read.table write.table
固定宽度Text pd.read_fwf NA read.fwf NA
Excel pd.read_excel pd.to_excel readxl::read_excel writexl::write_xlsx
JSON pd.read_json pd.to_json jsonlite::fromJSON jsonlite::toJSON

基本数据结构

Series

索引在pandas中是非常重要的概念,但在R中这个概念就很弱,甚至在R的DataFrame中尽量避免使用行名(R的行名相当于pandas中dataframe的索引)。

s = pd.Series(data = [100, 'a', {
   'dic1':5}],
  index = pd.Index(['id1', 20, 'third'], name='my_idx'),
  dtype = 'object',
  name = 'my_name')

s.shape

s['third'] ## 返回dict
s[['third']] ## 返回series
# s = pd.Series(np.arange(5), dtype=np.float32)

s <- list(
  id1 = 100,
  `20` = 'a',
  third = list(
    dic1 = 5
  )
)

length(s)

s[['third']] 
s['third']

DataFrame

对DataFrame数据的操作,pandas的[][[]]操作与R正好相反。

R中$也可以获取字段数据,但只能获取一列,而且是模糊匹配,[[]]也可以通过exact = FALSE实现模糊匹配字段。R的这个特性,我只在明确知道字段名称,而自己当时又特别懒的情况下,临时使用。也许是我没发现这个功能在其他地方有什么神奇效果,但我觉得这个弊大于利。

# Python
df = pd.DataFrame(
  data = {
   
    'col_0': [1,2,3], 
    'col_1':list('abc'), 
    'col_2': [1.2, 2.2, 3.2], 
    'mycol': range(3)},
  index = ['row_%d'%i for i in range(3)])

df['col_0'] # 返回series
df[['col_0']] # 返回dataframe

df.col_0.values # 返回numpy.ndarray
df.col_0.to_numpy() # 返回numpy.ndarray
# R
df <- data.frame(
  col_0 = 1:3,
  col_1 = c('a', 'b', 'c'),
  col_2 = c(1.2, 2.2, 3.2),
  mycol = 0:2,
  stringsAsFactors = FALSE
)

df["col_0"] # 返回dataframe
df[["col_0"]] # 返回vector

df$col_0 # 返回vector
df[, "col_0"] # 返回vector

df$my
df[['my', exact = FALSE]]

# R-dplyr
pull(df, col_0)
pull(df, col_0, col_1) ## 可以直接用col_1给col_0命名

常用函数

# Python
df = pd.read_csv('data/learn_pandas.csv')
# R
df <- read.csv('data/learn_pandas.csv', stringsAsFactors = FALSE)
内容 Python R
行名 df.index rownames(df)
列名 df.columns colnames(df)
字段类型 df.dtypes sapply(df, class)
字段信息 df.info str(df)
主要统计量 df.describe() summary(df)
字段数据 df[‘School’] df[[‘School’]]
df$School
维度 df.ndim -
维度 df.size prod(dim(df))
维度 df.shape dim(df)
行数 df.shape[0] nrow(df)
列数 df.shape[1] ncol(df)
列数 df.head() head(df)
列数 df.tail() tail(df)

特征统计函数

pandas可以直接使用统计函数,对各列进行统计,使用起来非常方便。

R与pandas有所差异,只有几个可以直接实现,但R中有summary可以直接查看所有列几个常用的统计指标,其他也可以使用apply系列函数实现。

# Python
df_demo = df[['Height', 'Weight']]

df_demo.sum()
df_demo.mean()
df_demo.max()
# R
df_demo <- df[, c('Height', 'Weight')]
summary(df_demo)

colSums(df_demo, na.rm = TRUE)
colMeans(df_demo, na.rm = TRUE)
sapply(df_demo, max, na.rm = TRUE)

替换函数

pandas的replace功能比R的replace功能更加全面。

# Python
df['Gender'].replace({
   'Female':0, 'Male':1}).head()
# R
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值