(超详细)新手入门Pandas数据处理「part II」:Series对象和DataFrame对象的属性、函数、运算及修改

(前言)关于什么是Series和DataFrame请看这篇:

https://blog.csdn.net/Joyceholm/article/details/138042968?spm=1001.2014.3001.5502

案例中用到的csv文件:

1.Series对象

1.1 Series对象的属性
'''Series对象的属性'''
'''
准备数据
'''
#导包
import pandas as pd
# 1.读取csv文件,获取DataFrame类型的对象 index_col=设置的索引列
data_df = pd.read_csv('nobel_prizes.csv', index_col='id')
# head()函数,展示df对象的前五行 在dataframe中常用
data_df.head()

'''从上述的df对象中获取series对象'''
# 获取一行
# 方式一:使用loc获取series对象, loc属性:根据行索引,封装成series对象
# 因为  series只以列的形式展示,所以在提取的是第一行的情况下也会用列的形式来展示
# 注:loc属性是根据行索引进行检索的,诺贝尔文学奖的行索引是从941开始的 由此也可以看出loc属性和iloc属性的不同
one_row = data_df.loc[941]

# 方式二:通过iloc获取series对象, iloc属性:根据行号(默认从0开始)获取整行数据,封装成Series
one_row = data_df.iloc[0]

# 获取一列:df对象.列名  df对象['列名']
# df对象.列名
one_list = data_df.year
# df对象['列名']
one_list = data_df['year']

'''
属性演示
'''
# 属性一:dtype, dtypes:查看Series对象的元素类型
print(one_row.dtype)   # object相当于python中的str
print(one_row.dtypes)   # object相当于python中的str

# 属性二:shape,size
print(one_row.shape)  # (7,) 七行数据:取的是一行数据,但是竖过来展示
print(one_row.size)  # 获取Series对象的长度,有多少个元素

# 属性三: index,values, keys()函数
# index: 获取Series对象的索引
print(one_row.index)  #Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object')
# values: 获取Series对象中的所有值
print(one_row.values) # [2017 'physics' nan 'Rainer' 'Weiss''"for decisive contributions to the LIGO detector and the observation of gravitational waves"'2]
# keys()函数:作用等同于 index
print(one_row.keys()) #Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object')
# values: 获取Series对象中的所有值
1.2 Series对象中的函数以及布尔索引
'''Series中的函数'''
# 准备数据
import pandas as pd
s1 = pd.Series(data=[1, 3, 5, 7, 9, 1, None], index=['A', 'B', 'C', 'D', 'E', 'F', 'G'])  # None是python中的一个内置对象,表示空值或空类型,包括空字符串,空列表和零,使用None作为变量的初始值,可以表示该变量没有绑定任何值

# 函数一:len() 获取Series对象的长度
print(len(s1))

# 函数二:head() & tail()
# head()
print(s1.head())  # 默认获取前5行
print(s1.head(n=2))  # n等于几就获取前几行 此处获取前两行

# tail()
s1.tail()  # 默认获取后5行
s1.tail(n=3)    # 这里获取后3行

# 函数三:聚合函数: count() sum() mean() max() min() value_counts()
print(s1.count())  # 统计Series对象中一共有多少值,不统计空值,所以这里结果为 6
print(s1.sum())  # 求和Series中的所有值
print(s1.mean())  # 求Series中所有值的平均值
print(s1.max())  # 求Series中所有值的最大值
print(s1.min())  # 求Series中所有值的最小值
print(s1.value_counts())  # 分组统计,即每个值出现了多少次 sql中的select 元素值, count(元素值) from 表名 group by 元素值

# 函数四: unique() drop_duplicates()
# unique():去重后返回的是列表
print(s1.unique())
# drop_duplicates(): 去重后返回的还是Series对象
print(s1.drop_duplicates())

# 排序 sort_values():默认升序 使ascending=False可以改为降序  ascending:上升的,上升
print(s1.sort_values())

# 函数五:绘制直方图
s1.hist()

'''布尔索引'''
# 布尔索引就是用布尔值列表选择出现哪些值,布尔索引值要和数据(行)数保持一致
s1_bool = s1[[True, False, False, True, True, False, True]]
s1_bool
1.3 Series对象的运算
'''series对象的运算'''
'''
情况一:Series对象和数值进行计算
'''
# 准备数据 
# 注:index为0, 1, 2顺序的话可以不用写,这里是为了下面的演示
s1 = pd.Series(data=[1, 0, 90, 12], index=[0, 1, 2, 3])
# Series对象和数值进行计算,数值会和s1对象中的每一个数进行计算
print(s1 + 10)
# Series对象和数值进行乘,除,整除,取余数运算也是数值和Series中的每一个数进行计算
print(s1 * 2)
print(s1 / 2)
print(s1 // 2)
print(s1 % 2)

'''
情况二:Series对象和Series对象进行计算
'''
# 准备数据 s2和s1索引数一致, s3和s1索引数不一致
s2 = pd.Series(data=[9, 0, 8, 7])
s3 = pd.Series(data=[1, 2, 3])
# s1和s2进行计算
print(s1 + s2)
# s1和s3进行计算,在索引数不一致的情况下,不匹配的就用Nan填充
print(s1 + s3)

# 改变s2的索引: 只有索引2即存在于s1又存在于s2,进行计算的时候也只针对索引2对应的数值进行计算,其余的值都用Nan填充
s2 = pd.Series(data=[9, 0, 8, 73], index=[2, 10, 100, 1000])
print(s1 + s2)

# 注:反转索引
s2.sort_index(ascending=False)

2.DataFrame对象的属性、方法及运算

'''DataFrame对象的属性和方法'''
# 注:以下DataFrame都用df指代
# 导包
import pandas as pd
df = pd.read_csv('movie.csv')

'''
df对象常用属性
'''
# .shape : 形状 是个几行几列的df
print(df.shape) # 统计几行几列
# .size :大小,几行*几列
print(df.size)
# .ndim : 维度 Series是一维的‘一列数据’,df是包含多个Series的二维数组
print(df.ndim)
# .index : 获取所有的行索引
print(df.index)
# .values : 查看所有的值
print(df.values)
# .dtype : 查看所有的元素类型
print(df.dtypes)


'''DataFrame常用函数'''
# 函数一:head(), tail()函数和Series中用法一致
# .info(), .info : 查看完整内容信息
print(df.info)
# .describe() : 查看数据的算术信息 平均值,最大值,方差, 四分之位数, 中位数, 四分之三位数
print(df.describe())
# describe中通过include属性可以选择列出哪些值,include='all'即选中所有值
df.describe(include='object')
# describe中通过exclude属性可以选择不列出哪些值,
df.describe(exclude='float')
# df对象中的len(), count(), max(), min(), mean()使用和Series对象一样,注意:mean()只对数字列有效


'''布尔索引'''
# df的布尔索引操作和series基本一致
print(df.head()[[False, True, False, True, False]])  # 只展示了1, 3行

'''
情况一:df对象和数值进行计算
'''
# 只有数列行能与数值进行计算,这里选用了观后反馈批评人数和历时,无任何意义,只做演示,以下演示中data的值变了
data = df[['num_critic_for_reviews', 'duration']]
print(data + 2)

data = df.head(n=4)
print(data * 2)  # 输出5遍前两行

'''
情况二:df对象和df对象进行计算
'''
print(data + data)  # 和data*2效果一致

# 两个df对象做运算但是行索引不一致,和series对象一样,不一致的地方用Nan填充
# 对data进行切片 data[:] 切片和python中类似,左闭右开
print(df + data[:2])

3.对DataFrame对象和Series对象进行修改操作

'''对df对象和Series对象进行更改操作'''
import pandas as pd
movie = pd.read_csv('movie.csv')

'''
为df对象设置索引列
'''
# 方式一:在读入文件的时候直接设置
movie1 = pd.read_csv('movie.csv',index_col='duration')
# 方式二:读取完毕后添加索引列 设置索引列的时候如果不加 inplace=True 则返回新的对象,不对原有对象做修改,所以需要新建一个对象来接收返回的新对象
# 未设置inplace=True
movie2 = movie.set_index('movie_title')
print(movie2.head())
# 设置inplace=True
movie.set_index('movie_title', inplace=True)
print(movie.head())

'''
删除自定义的索引
'''
# 这里inplace的用法同上
movie.reset_index(inplace=True)
movie.head()

'''
修改行名和列名
'''
# 修改行名
# 方式一:rename函数进行修改:格式为:df对象.rename(index=新的索引列(列表形式),columns=新的列名(列名形式))
# 修改行索引名
idx_new = {'Avatar': '阿凡达', "Pirates of the Caribbean: At World's End" : '加勒比海盗' }
col_new = {'color' : '颜色', 'director_name' : '导演名'}

movie.rename(index=idx_new, columns=col_new)

# 方式二:直接加载出列名和索引名进行修改
idx_list = movie.index.to_list()
col_list = movie.columns.to_list()

# 修改行索引值
idx_list[0] = 'AAA'
# 修改列索引名
col_list[0] = 'CCC'
# 重新设置行列索引
movie.index = idx_list
movie.columns  = col_list
movie.head()

'''
添加,插入,删除列
'''
# 添加列的格式 df['新列名'] = ... 可以是任意类型,也可以是其他列的计算结果
# 添加列默认在末尾添加
movie['test'] = 1
movie.head()

# 新增列: 导演和演员在脸书总的点赞数
movie['direct_actor_fb_likes'] = movie['director_facebook_likes'] + movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes']

# 插入列:格式:insert():在指定位置插入列,参数一:插入位置(索引:从0开始),参数二:索引名,参数三:列值
# 插入列也可以是其他列的计算值
movie.insert(loc=1, column='new_test', value=1)
movie.head()

# 删除列:格式:df对象.drop('列名', axis = ‘columns’)  axis=‘columns’即按列, 此处columns可以用1替代,但不建议
movie.drop('new_test', axis='columns')

'''删除行'''
# 格式:df对象.drop(['行索引值1', ''行索引值2,...])
movie.drop(['AAA', 2], inplace=True)
movie.head()

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值