Pandas
"""
Pandas
DataFrame: 可以把DataFrame看作由Series对象组成的字典, 其中key是列名, 值是Series
Series: Series和Python中的列表类似, 但是Series中每个元素的数据类型必须相同
没有行的数据结构:
即使是行数据, 也会通过列的方式进行展示
"""
1.1 Series
"""
创建Series对象
Series 是pandas中的最基本的数据结构对象, 是DataFrame的列对象或者行对象
Series 本身具有行索引
Series 是一种类似于一维数组的对象, 有两个部分组成
1. values 一维数组的数据(numpy.ndarray类型)
2. index 相关的数据行索引标签, 如果没有为数据指定索引, 于是自动创建一个 0 到 n-1 的整形索引
"""
import pandas as pd
import numpy as np
n = np. array( [ 1 , 2 , 3 ] )
print ( n)
print ( type ( n) )
s = pd. Series( data= n)
print ( s)
print ( type ( s) )
s = pd. Series( [ "hello" , 12 ] )
print ( s)
print ( type ( s[ 1 ] ) )
tuple = ( 1 , 2 , 3 )
s = pd. Series( tuple )
print ( s)
d = { "a" : 1 , "b" : 2 , "c" : 3 }
s = pd. Series( d)
print ( s)
1.1.1 常用属性
"""
常用属性:
loc -- 使用索引值获取数据
iloc -- 使用行号获取数据
dtype dtypes -- Series 内容的数据类型
T -- Series的转置矩阵
shape -- 数组的维度
size -- Series 中元素的数量
values -- Series 的数据值
index -- Series 的索引值
"""
data = pd. read_csv( 'data/nobel_prizes.csv' , index_col= 'id' )
print ( data. head( ) )
first_row = data. loc[ 1 ]
print ( first_row)
first_row = data. iloc[ 1 ]
print ( first_row)
1.1.2 常用方法
"""
常用方法
append -- 连接两个或多个Series
corr -- 计算与另一个Series的相关系数
cov -- 计算与另一个Series的协方差
describe -- 计算常见统计量
drop_duplicates -- 返回去重之后的Series
equals -- 判断两个Series是否相同
get_values -- 获取Series的值,作用与values属性相同
hist -- 绘制直方图
isinSeries -- 中是否包含某些值
min -- 返回最小值
max -- 返回最大值
mean -- 返回算术平均值
median -- 返回中位数
mode -- 返回众数
quantile -- 返回指定位置的分位数
replace -- 用指定值代替Series中的值
sample -- 返回Series的随机采样值
sort_values -- 对值进行排序
to_frame -- 把Series转换为DataFrame
unique -- 去重返回数组
value_counts -- 统计不同值数量
keys -- 获取索引值
head -- 查看前5个值
tail -- 查看后5个值
"""
dfm = pd. read_csv( 'data/scientists.csv' )
print ( dfm)
print ( dfm. head( ) )
dfm[ dfm[ 'Age' ] > dfm. Age. mean( ) ]
"""
series 的运算
Series 与 数据类型变量计算时, 变量会与Series中每个元素进行计算
两个 Series之间计算时, 索引相同的元素会进行计算, 索引值不同的元素的计算结果会用NaN进行填充
"""
2.1 DataFrame
"""
DataFrame
DataFrame 是一个表格型数据结构, 包含任意多个Series
DataFrame 是Pandas中最基本的数据结构对象 可以认为是一个二维数据表, 有行有列有索引
DataFrame 许多属性和方法 与 Series 相同
"""
dict_data = {
'id' : [ 1 , 2 , 3 ] ,
'name' : [ 'Alice' , 'Bob' , 'Charlie' ] ,
'age' : [ 25 , 30 , 35 ]
}
dfm = pd. DataFrame( data= dict_data)
print ( dfm)
print ( type ( dfm) )
dfm = pd. DataFrame( data= dict_data, index= [ 'A' , 'B' , 'C' ] , columns= [ 'id' , 'name' , 'age' ] )
print ( dfm)
list_data = [ ( 1 , '张飞' , 18 ) , ( 2 , '关羽' , 20 ) , ( 3 , '刘备' , 22 ) ]
dfm = pd. DataFrame( list_data, index= [ 'A' , 'B' , 'C' ] , columns= [ 'id' , 'name' , 'age' ] )
print ( dfm)
2.1.1 基础属性 基本函数
"""
DataFrame 基础属性 基本函数
"""
dfm = pd. read_csv( 'data/scientists.csv' )
print ( '=============== 常用属性 ===============' )
print ( dfm. shape)
print ( dfm. size)
print ( dfm. values)
print ( dfm. ndim)
print ( dfm. dtypes)
print ( dfm. index)
print ( dfm. columns)
print ( '=============== 常用方法 ===============' )
print ( dfm. head( ) )
print ( dfm. tail( ) )
dfm. info( )
print ( dfm. describe( ) )
print ( dfm. describe( exclude= [ 'int' , 'float' ] ) )
print ( dfm. describe( include= 'all' ) )
print ( len ( dfm) )
print ( dfm. min ( ) )
print ( dfm. count( ) )
print ( dfm. mean( ) )
2.1.2 索引相关操作
"""
DataFrame 索引相关操作
Pandas 关于DataFrame和Series相关API中 参数有 inplace 的 默认值是 False
即会返回对象的副本 不会对原始对象数据进行更改
如果 设置 inplace=True 就会直接修改原来的数据, 但是该方法就没有返回值了
"""
movie = pd. read_csv( 'data/movie.csv' )
movie. head( )
new_movie = movie. set_index( 'movie_title' )
new_movie. head( )
movie. set_index( 'movie_title' , inplace= True )
movie. head( )
movie. reset_index( inplace= True )
movie. head( )
2.1.3 修改行名 和 列索引值
"""
DataFrame 修改行名 和 列索引值
方式一 rename()函数, 可以对原有的行索引名 和 列名进行修改
方式二 把 index 和 columns属性提取出来, 修改之后, 再赋值回去
"""
movie = pd. read_csv( 'data/movie.csv' , index_col= 'movie_title' )
movie. index[ : 5 ]
movie. columns[ : 5 ]
idx_rename = { 'Avatar' : '阿凡达' , "Pirates of the Caribbean: At World's End" : '加勒比海盗' }
col_rename = { 'color' : '颜色' , 'director_name' : '导演名' }
movie. rename( index= idx_rename, columns= col_rename) . head( )
movie = pd. read_csv( 'data/movie.csv' , index_col= 'movie_title' )
index_list = movie. index. tolist( )
columns_list = movie. columns. tolist( )
index_list[ 0 ] = '阿凡达'
index_list[ 1 ] = '加勒比海盗'
columns_list[ 0 ] = '颜色'
columns_list[ 1 ] = '导演名'
movie. index = index_list
movie. columns = columns_list
movie. head( 5 )
2.1.4 添加列
movie = pd. read_csv( 'data/movie.csv' , index_col= 'movie_title' )
movie[ 'has_seen' ] = 0
movie. head( )
movie. insert( loc= 1 , column= 'profit' , value= movie[ 'gross' ] - movie[ 'budget' ] )
movie. head( )
2.1.5 删除列
movie. drop( 'has_seen' , axis= 'columns' , inplace= True )
movie. drop( 'Avatar' , axis= 'rows' , inplace= True )
movie. reset_index( inplace= True )
print ( movie. head( ) )
print ( '*' * 30 )
movie. drop( [ 0 , 1 ] , inplace= True )
print ( movie. head( ) )
3.1 导入 导出 数据
"""
导出数据
"""
dfm = pd. read_csv( 'data/scientists.csv' )
dfm
new_dfm = dfm[ dfm. Age > dfm. Age. mean( ) ]
new_dfm
new_dfm. to_csv( 'output/scientists_noindex.tsv' , index= False , sep= '\t' )
print ( '导出成功!' )
"""
导入数据
"""
pd. read_csv( 'output/scientists_noindex.tsv' , sep= '\t' )