15、python下pandas的Series、DataFrame使用

一、Series

1.1、Series的创建

import pandas as pd
import string
a=pd.Series(range(10),index=list(string.ascii_uppercase[:10]))
####通过字典创建
a=pd.Series({string.ascii_uppercase[i]:i for i in range(10)})
print(a)

输出:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9

1.2、Series切片与索引

a[2:10:2]
a[1]
a[[2,4,6,8]]
a[a>4]
a[‘F’]:通过索引取值
a[[‘A’,‘F’,‘g’]]:索引不存在则显示为NaN

1.3、索引和值

a.index:获取索引,为索引对象
a.values:获取数值,为numpy数组对象
Series很多方法与numpy数组的方法一致,a.where()除外。

二、DataFrame

2.1、pandas读取外部数据

读取csv:pd.read_csv()
数据库读取数据:pd.read_sql(sql_sentence,connection)

2.2、索引

行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

t=pd.DataFrame(np.arange(12).reshape(3,4),index=list(‘abc’),columns=list(‘wxyz’))
index设置行索引,columns设置列索引

2.3、DataFrame基本属性

df.shape:(行数,列数)
df.dtypes:列数据类型
df.ndim:维数,n维
df.index:行索引
df.columns:列索引
df.values:值,ndarray对象

2.4、DataFrame整体情况查询

df.head()
df.tail()
df.info()
df.describe()
DataFrame排序:df.sort_values(by=field,ascending=False)

2.5、DataFrame索引与切片

1、df[数字1:数字2] 、df[行索引1:行索引2]:选择行,结果为dataframe,单个数字或单个行索引均无法使用,通过数字时结果不包括数字2,通过行索引时包括行索引2
2、df[列索引]、df[[列索引1,列索引2]]:选择单列(为Series类型),选择多列(为dataframe类型),无法通过:切片。
3、df.loc[行索引1:行索引2]、df.loc[行索引1]:选择单行得到Series类型,切片包含行索引2
4、df.loc[行索引1:行索引2,列索引1:列索引2]、df.loc[[行索引1,行索引2],[列索引1,列索引2]]:切片包含行索引2,列索引2
5、df.loc[:,列索引1:列索引2]、df.loc[:,列索引1]:选择单列得到Series类型, 切片包含列索引2
6、df.iloc[]与df.loc[]规则类似,但是通过位置1、2…n且切片不包含末尾
7、布尔索引
df[df[列].str.len()>4&df[列]>100]:&表示并条件,|表示或条件,len()获得字符串长度。
常见的字符串函数有contains(各字符串是否含有指定模式的布尔型数组)、len(返回字符串长度)、upper、lower、replace(用指定字符串替换找到的模式)、split(根据分割符或正则表达式对字符串进行拆分生成列表)

2.6、缺失数据处理:

1、df.isnull(),df.notnull():判断每个元素是为空/非空
2、df.dropna(axis=0, how=‘any’, inplace=False):axis=0表示行,how为any表示任意一列为空都删除,all表示所有列为空才删除,inplace表示是否修改原字符串。
3、t.fillna(t.mean()):t.mean()返回每一列的均值生成的series,表示用没一列的均值填充缺失值,默认生成一个新dataframe,t[‘age’]=t[‘age’].fillna(t[‘age’].mean())可以只对某一列缺失值进行处理
4、处理为0的数据:t[t==0]=np.nan
NaN不参与dataframe的统计数计算

2.7、dataframe的统计方法:

df[‘field1’].mean()
df[‘field1’].median()
df[‘field1’].argmax()
df[‘field1’].argmin()
df[‘field1’].max()
df[‘field1’].min()
series.tolist():将series转成列表
df.to_list():将dataframe转化为列表
df.value:将dataframe转为数组
df.unique():生成唯一取值的列表
[j for i in z for j in i]:嵌套列表生成单层列表

2.8、genre_zero列以列表为元素,统计genre_zero下各元素的数量

genre_temp=df['Genre'].str.split(",").tolist()###列表的列表
genre_list=[j for i in genre_temp for j in i]###转化为单层的列表列表
genre_list=list(set(genre_list))###去重
genre_zero=pd.dataframe(np.zero(shape=(df.shape[0],len(genre_list) ),dtype=int),columns=genre_list)
###构造全0数组,genre_list为列标签
for i in range(df.shape[0]):
	genre_zero.loc[i,genre_temp[i]]=1####列取值为列表
print(genre_zero.sum(axis=0))###每个分类的统计和

2.9、操作案例

假设现在我们有一组从2006年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?

import pandas as pd
path='IMDB-Movie-Data.csv'
movie_data=pd.read_csv(path)
print(movie_data.info())
pd.set_option('display.max_columns', None)
print(movie_data.head(5))
###电影评分的均值
print(movie_data["Rating"].mean())
##导演数
print(len(set(movie_data["Director"])))
print(len(movie_data["Director"].unique()))###.unique()结果为numpy数组
###演员数
##actors_list=list(movie_data["Actors"].str.split(','))
actors_list=movie_data["Actors"].str.split(',').tolist()
##获取字段、按,分列生成列表,最终生成列表的列表
actor_list=[j for i in actor_list for j in i]
print(len(set(actor_list)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值