Python 数据分析4:Pandas Series、DataFrame基本操作

Pandas是一个强大的工具集,用于分析结构化的数据。Pandas的基础是 NumPy。Pandas常用于数据挖掘、数据分析和数据清洗。

Pandas相当于Python中的Excel,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

import pandas as pd

1. Series

Series 就像数据库中的属性和对应的一行,类似于一维数组,可以保存任何数据类型。轴标签(属性)统称为索引。

1.1 创建Series

1.1.1 通过list创建

pd.series(list, index=[]) index默认为0,1,2,3...,下同

lst = [1,2,3,4]
s = pd.Series(lst, index=['a', 'b', 'c', 'd'])

1.1.2 通过字典创建

pd.series(dict)

dic = {"A":1,"B":2,"C":3,"D":2}
s2 = pd.Series(dic)

 1.1.3 通过NumPy创建

pd.Series(np)

s = pd.Series(np.random.randint(1,10,size=(3,)),index=['a','b','c'])

1.2. Series的索引和切片

1.2.1 隐式索引

s[0] 取第0个元素

s[[0,1]] 取列表中索引的多行

s[start:end] 切片操作,取到start至end-1行

使用iloc来专门对隐式索引进行相关操作,也是只能取到0和1行,顾头不顾尾

s.iloc[start:end]   跟s[start:end] 一样

s.iloc[[0,1]]    跟s[[0,1]]一样

1.2.2 显式索引

""引号内是索引

s["e1"] 取单个元素

s[["e1","e2"]] 取可以连续也可以不连续的多行

s["e1":"e2"] 切片,取e1行和e2行,这里的e2行可以取到

使用loc来专门对显式索引进行相关操作

s.loc["e1":"e2"]  跟s["e1":"e2"]一样

s.loc[["e1","e1"]] 跟s[["e1","e1"]]一样

1.3 显示

s1.head(a) 显示前a行 不带参数默认为5行

s1.tail(a)  显示后a行 不带参数默认为5行

2. DataFrame

DataFrame类似于一张表格,包含有一组有序的列,每列可以是不同的数值类型,可以被看做是由Series组成的字典。

行索引index,表明不同行,横向索引,axis=0,每一行代表一条数据记录

列索引columns,表明不同列,纵向索引,axis=1,每一列代表一个属性

2.1 创建DataFrame

2.1.1 通过字典创建

pd.DataFrame(data)

data = {
    'name':['n1','n2','n3'],
    'height':[170,184,179,167,180]
}
frame = pd.DataFrame(data)

2.1.2 通过csv文件创建

pd.read_csv("xxx.csv")

2.2 DataFrame的属性

df.shape 行、列数

df.dtypes 列数据类型

df.ndim 数据维度

df.index 取行索引

df.columns 取列索引

df.values 取df的值,二维np.ndarray数组

2.3 DataFrame索引

方括号中写数组,表示取行;写字符串,表示取列

frame['列名','列名'...] 根据列名进行显式索引

frame[start: end] 隐式索引取行

frame[行索引][列索引] 同时取行和列

frame[frame['属性']>5] 布尔索引

frame.iloc[] 通过标签进行索引(行)

frame.loc[] 通过位置进行索引(列)

2.4 DataFrame常用方法

df.dropna(axis=0) 删除包含NaN的行 参数how="all"全为NaN才删除

df.fillna(xx 将NaN替换为xx)

2.5 缺失数据处理

df.sort_values(by="xx") 根据xx属性升序排列,加ascending=False参数则降序排列

pd.isnull(df) 返回是否为NaN

df.mean() 平均数

df.median() 中位数

2.6 案例:电影数据分析

下表是IMDb网站上的部分数据

链接:https://pan.baidu.com/s/12KBnRmcYg6hOQJmYazQMwA
提取码:x7wh

 输出所有电影的平均分,输出导演的人数、输出演员的人数

import pandas as pd
movie_df = pd.read_csv("datasets_IMDB-Movie-Data.csv")
movie_df.head(20)
print(movie_df["Rating"].mean())
print(movie_df["Director"].unique().__len__())

# str Series转为String
actor_list_of_each_movie = movie_df["Actors"].str.split(',').tolist()
actor_list = list(set([actor for l in actor_list_of_each_movie for actor in l]))
print(actor_list.__len__())

输出每个分类的电影的数量

import numpy as np
import pandas as pd
movie_df = pd.read_csv("datasets_IMDB-Movie-Data.csv")
genre_col = movie_df["Genre"]
all_genres = genre_col.str.split(',').tolist()
genre_list = list(set([i for j in all_genres for i in j]))
zeros_df = pd.DataFrame(np.zeros((movie_df.shape[0], len(genre_list))), columns=genre_list)
for i in range(movie_df.shape[0]):
    zeros_df.loc[i, all_genres[i]] = 1
genre_count = zeros_df.sum(axis=0)
print(genre_count)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hinomoto Oniko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值