17、Pandas 数据处理库

1、Series的常用属性及方法

1.1、创建Series

Series是一列数据,Series表示DataFrame的每一列,DataFrame是二维数据
1、不指定索引默认从0开始
2、可以通过index修改行索引

import pandas as pd
pd.Series(['banana', 42])
/*
0    banana
1        42
dtype: object
*/
s = pd.Series(["apple", "banana"], index=['a', 'b'])
/*
a     apple
b    banana
dtype: object
*/
1.2、Series的常用属性

1、加载CVS文件

data = pd.read_csv('nobel_prizes.csv', index_col='id')
print(data.head()) # 默认从头开始加载前5行数据
print(data.tail(5)) # 默认加载末尾5行数据

2、使用 DataFrame的loc 属性获取数据集里的一行,就会得到一个Series对象

first_row = data.loc[100]
print(type(first_row)) # <class 'pandas.core.series.Series'>
print(first_row) 
 # year                                                              1974
 # category                                                       physics
 # overallMotivation                                                  NaN
 # firstname                                                   Sir Martin
 # surname                                                           Ryle
 # motivation           "for their pioneering research in radio astrop...
 # share                                                                2
 # Name: 100, dtype: object

2、可以通过 index 和 values属性获取行索引和值

first_row.index 
# Index(['year', 'category', 'overallMotivation', 'firstname', 'surname', 'motivation', 'share'], dtype='object')
first_row.values
# array([1974, 'physics', nan, 'Sir Martin', 'Ryle', '"for their pioneering research in radio astrophysics: Ryle for his observations and inventions, in particular of the aperture synthesis technique, and Hewish for his decisive role in the discovery of pulsars"', 2], dtype=object)

3、Series的keys方法,作用和index属性一样

data.keys()
# Index(['year', 'category', 'overallMotivation', 'firstname', 'surname', 'motivation', 'share'], dtype='object')

4、Series的其他属性
loc:使用索引值取子集
iloc:使用索引位置取子集
dtypedtypes:Series内容的类型
T:Series的转置矩阵
shape:数据的维数
size:Series中元素的数量
values:Series的值

2.3、Series常用方法

1、针对数值类型的Series进行计算

share = data.share
share.mean() # 平均
share.min() # 最小
share.max() # 最大
share.std() # 标准差

2、通过value_counts()方法,可以返回不同值的条目数量

movie = pd.read_csv('movie.csv')
director = movie['director_name'] # 从电影数据中获取导演名字,默认返回5条
director.value_counts() # 统计不同导演指导电影的数量, 默认返回5条

3、通过count() 返回非空数据

director.count() # 非空数量
director.shape # 全部数量

4、describe()打印描述信息

director.describe()

5、Series的其他方法
append():连接两个多个Series
corr():计算与另一个Series的关系
cov():计算与另一个Series的协方差
describe():计算常见统计量
drop_duplicates():返回去重之后的Series
equals():是否相等
get_values():获取Series的值,与values相等
hist():绘制直方图
isin():Series中是否包含某些值
min():最小
max():最大
mean():平均
median():中位数
mode():众数
quantile():指定位置的分位数
replace():用指定值代替Series中的值
sample():随机样本
sort_values():对值进行排序
to_frame():把Series转换为DataFrame
unique():去重返回数组

2.4、Series的布尔索引
scientists = pd.read_csv('data/scientists.csv')
ages = scientists['Age']
bool_values = [False, True, True, False, False, False, False, False]
ages[bool_values] # 只返回True对应的ages数组元素
# 1    61
# 2    90
# Name: Age, dtype: int64
2.5、Series的运算
ages * 2 # 对每一项都乘以2
ages + ages # 对每一项进行相加
# 索引不同的元素最终计算的结果会填充成缺失值,用NaN表示
ages * pd.Series([1, 100])
# 0      37.0
# 1    6100.0
# 2       NaN
# 3       NaN
# 4       NaN
# 5       NaN
# 6       NaN
# 7       NaN

2、DataFrame的常用属性及方法

2.1、创建DataFrame

1、有索引index,也有列名columns

name_list = pd.DataFrame(data={'职业': ['Teacher', 'Student'], 'gender': ['M', 'F']}, columns=['职业', 'gender'], index=['a', 'b'])
print(name_list)
/*
        职业 gender
a  Teacher      M
b  Student      F
*/
name_list = pd.DataFrame({'职业': ['Teacher', 'Student'], '性别': ['M', 'F'], '年龄': [22, 23]})
print(name_list.T)
/*
          0        1
职业  Teacher  Student
性别        M        F
年龄       22       23
*/
2.2、DataFrame的常用属性和方法

同 Series

2.3、DataFrame的布尔索引
movie[movie['duration']> movie['duration'].mean()] #返回满足条件为True的所有项
movie.head(5)[[True, True, False, True, False]] # 为True对应的项保留
2.4、DataFrame的运算

同Series

3、更改Series和DataFrame的方法

3.1、给索引命名

1、通过set_index()方法设置行索引名字

movie.set_index('movie_title') # 指定movie_title为索引名称

2、通过index_col参数,指定使用某一列数据作为行索引

pd.read_csv('movie.csv', index_col='movie_title')

3、通过reset_index()方法可以重置索引

movie.reset_index()

4、通过rename()方法对原有的行索引名和列名进行修改

movie.index[:5]
movie.columns[:5]
idx_rename = {'Avatar': 'Ratava', 'Spectre': 'Ertceps'}
col_rename = {'director_name': 'Director Name', 'num_critic_for_reviews': 'Critic Review'}
movie.rename(index=idx_rename, columns=col_rename).head()
3.2、添加、删除、插入

1、通过dataframe[列名]添加新列

movie = pd.read_csv('movie.csv')
movie['has_seen'] = 0
# 给新列赋值
movie['actor_director_11'] = (movie['actor_1_facebook_likes'] +
                              movie['actor_2_facebook_likes'] +
                              movie['actor_3_facebook_likes'])

2、通过drop方法删除列

movie = movie.drop('actor_director_11', axis='columns')

3、insert插入列

# loc 新插入的列在所有列中的位置(0,1,2,3...) column=列名 value=值
movie.insert(loc=0, column='profit', value=movie['gross']-movie['budget'])

4、导入导出数据

4.1、pickle文件

1、pickle文件介绍
如要保存的对象是计算的中间结果,或者保存的对象以后会在Python中复用,可把对象保存为.pickle文件
如果保存成pickle文件,只能在python中使用
文件的扩展名可以是.p.pkl.pickle

names = scientists['Name']
names.to_pickle('output/scientists_name.pickle')
scientists.to_pickle('output/scientists_df.pickle')

2、读取pickle文件

scientists_name = pd.read_pickle('output/scientists_name.pickle')
4.2、csv文件

1、csv文件介绍
CSV(逗号分隔值)是很灵活的一种数据存储格式
在CSV文件中,对于每一行,各列采用逗号分隔
除了逗号,还可以使用其他类型的分隔符,比如TSV文件,使用制表符作为分隔符
CSV是数据协作和共享的首选格式


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容