目录
前言
Pandas 包是基于 Python 平台的数据管理利器,已经成为了 Python 进行数据分析和挖掘时的数据基础平台和事实上的工业标准。
一、Pandas库的安装
- 按win+r打开命令提示符,输入cmd,按回车进入。输入下面的代码,安装pandas库和jupyter notebook库
- 若安装不了或者pip想换源的可以看:python-快速上手爬虫-CSDN博客
pip install pandas
pip install jupyter notebook
- 安装好了之后在pycharm的Terminal处输入:
jupyter notebook
- 会跳转到网页打开jupyter,找到自己python代码所在的文件夹,再在右上角新建文件进行操作。
二、不同对象的建立
先导入pandas和numpy库
import pandas as pd
import numpy as np
1.Series对象的创建
# 一维数组的创建
data = pd.Series([2,3,4,1,4,5])
data = data.drop_duplicates() # 对数据进行去重
data # 系统会给一个默认的从0开始的索引
输出:
0 2
1 3
2 4
3 1
5 5
dtype: int64
1.用index方法指定索引
data = pd.Series([12,23,4,1,5,6])
data.index = [2,3,4,5,6,7] # 用index方法指定索引
data
输出: 索引和数值位数必须对应,不然会报错
2 12
3 23
4 4
5 1
6 5
7 6
dtype: int64
2.在创建的时候就指定索引
# 在创建的时候就指定索引
data = pd.Series([13,4,5,6,6,7],index = [1,2,3,4,5,6])
data = data.drop_duplicates() # 值查重
data1 = pd.Series([2,3,4,5,6,7],index = list('acbdds'))
data1 = data1[~data1.index.duplicated()] # 行索引查重 无'~'就显示哪一行重复 有'~'就删除重复行
data,data1
输出:
(1 13
2 4
3 5
4 6
6 7
dtype: int64,
a 2
c 3
b 4
d 5
s 7
dtype: int64)
3.使用字典的方式创建
- 使用字典的方式创建
# 使用字典的方式创建 population_dict={'sh':2800,'bj':3000,'gz':1500,'sz':1200} pp=pd.Series(population_dict) # 将字典转换成一维数组 键当索引 值当值 pp
输出:将字典转换成一维数组 ,键当索引,值当值
sh 2800 bj 3000 gz 1500 sz 1200 dtype: int64
- 传入由字典创建的数组 并且指定索引 取交集 不存在则输出NaN
# 传入由字典创建的数组 并且指定索引 取交集 不存在则输出NaN ppp = pd.Series(pp,index = ['bj','xa','hf','sz']) ppp
输出:
bj 3000.0 xa NaN hf NaN sz 1200.0 dtype: float64
4.将一个常量与index一起传入创建
# 将一个常量与index一起传入创建
data = pd.Series(10,index =list('abcd')) # 数组中所有的值都是10
data
输出:
a 10
b 10
c 10
d 10
dtype: int64
5.输出值和索引
2 12
3 23
4 4
5 1
6 5
7 6
print(data.values) # 输出数组的值
print(data.index) # 输出数组的索引
输出:
[12 23 4 1 5 6]
Index([2, 3, 4, 5, 6, 7], dtype='int64')
2.DataFrame对象的创建
- 可以被看做是由 Series 组成的字典
pp = pd.Series({'beijing':3000,'shanghai':1200,'guangzhou':1800})
area = pd.Series({'beijing':300,'tianjin':180,'guangzhou':200}) # 对两列数据的索引取并集 值不存在则为NaN
citys = pd.DataFrame({'area':area,'population':pp}) # 创建列名
citys
输出:
area population
beijing 300.0 3000.0
guangzhou 200.0 1800.0
shanghai NaN 1200.0
tianjin 180.0 NaN
1.不指定列名则以键当列名 行索引为默认值
population_dict={'beijing':3000,'tianjin':1200,'guangzhou':1800}
area_dict={'beijing':300,'shanghai':180,'guangzhou':200}
data=pd.DataFrame([population_dict,area_dict]) # 不指定列名则以键当列名 行索引为默认值
data
输出:
beijing tianjin guangzhou shanghai
0 3000 1200.0 1800 NaN
1 300 NaN 200 180.0
2.columns指定列名
pp = pd.Series({'beijing':3000,'shanghai':1200,'guangzhou':1800})
pp1 = pd.DataFrame(pp,columns = ['population']) # columns指定列名
print(pp1.loc['beijing']) # 按行的索引取值
print(pp1.iloc[0]) # 按行的索引值取值
pp1
输出:
population 3000
Name: beijing, dtype: int64
population 3000
Name: beijing, dtype: int64
population
beijing 3000
shanghai 1200
guangzhou 1800
3.指定索引名
pp2 = pd.DataFrame([pp,area],index = ['population','area']) # 指定索引名
print(pp2['beijing']) # 取单列
print(pp2[['shanghai','tianjin']]) # 取多列
pp2
输出:
population 3000.0
area 300.0
Name: beijing, dtype: float64
shanghai tianjin
population 1200.0 NaN
area NaN 180.0
beijing shanghai guangzhou tianjin
population 3000.0 1200.0 1800.0 NaN
area 300.0 NaN 200.0 180.0
4.打印索引,值和列名
area population
beijing 300.0 3000.0
guangzhou 200.0 1800.0
shanghai NaN 1200.0
tianjin 180.0 NaN
print(citys.index)
print(citys.values)
print(citys.columns) # 打印列名
输出:
Index(['beijing', 'guangzhou', 'shanghai', 'tianjin'], dtype='object')
[[ 300. 3000.]
[ 200. 1800.]
[ nan 1200.]
[ 180. nan]]
Index(['area', 'population'], dtype='object')
三、读取文件
基本读的都是csv文件和txt文件
1.csv文件
- 文件的路径:./表示同级目录下的文件;../表示上机目录下的文件
# 读文件 基本都是csv文件
# header = None 不把第一行读成列名 names 指定读取的列名
stu_df = pd.read_csv('./students.csv',header = None,names =['id','name','age','gender','clazz'])
stu_df
输出:太长的数据一般只会显示头尾五行
id name age gender clazz
0 1500100001 施笑槐 22 女 文科六班
1 1500100002 吕金鹏 24 男 文科六班
2 1500100003 单乐蕊 22 女 理科六班
3 1500100004 葛德曜 24 男 理科三班
4 1500100005 宣谷芹 22 女 理科五班
... ... ... ... ... ...
995 1500100996 厉运凡 24 男 文科三班
996 1500100997 陶敬曦 21 男 理科六班
997 1500100998 容昆宇 22 男 理科四班
998 1500100999 钟绮晴 23 女 文科五班
999 1500101000 符瑞渊 23 男 理科六班
1000 rows × 5 columns
2.txt文件
- 读取txt文件需要指定分隔符,文件里各列以相同的方式进行分隔
# 读取txt文件 需要指定分隔符 这里读取的是之前爬虫爬取的豆瓣小说的信息
book_df = pd.read_csv('./novel.txt',header=None,sep ='#',names=["book_name","price","y","publish","author","star"])
输出:
book_name price y publish author star
0 食南之徒 56.00 2024-4 湖南文艺出版社 马伯庸 8.3
1 太白金星有点烦 45.00 2023-6 湖南文艺出版社 马伯庸 9.0
2 长安的荔枝 45.00 2022-10 湖南文艺出版社 马伯庸 8.5
3 额尔古纳河右岸 32.00 2019-6 人民文学出版社 迟子建 9.1
4 活着 20.00 2012-8 作家出版社 余华 9.4
... ... ... ... ... ... ...
193 庆余年·壹 28.00 2008-7 中国友谊出版公司 猫腻 8.0
194 月亮和六便士 15.00 2006-8 上海译文出版社 [英] 毛姆/傅惟慈 9.0
195 孤岛的来访者 49.00 2023-4 新星出版社 [日] 方丈贵惠/穆迪 7.8
196 安南想象 78 2024-5 上海文艺出版社 朱琺 8.6
197 黄金时代 35.00 2017-4 北京十月文艺出版社 王小波 8.7
198 rows × 6 columns
四、了解数据
1.head() 和 tail()
- head() 浏览前几条
book_df.head(10) # 浏览前几条
输出:
book_name price y publish author star 0 食南之徒 56.00 2024-4 湖南文艺出版社 马伯庸 8.3 1 太白金星有点烦 45.00 2023-6 湖南文艺出版社 马伯庸 9.0 2 长安的荔枝 45.00 2022-10 湖南文艺出版社 马伯庸 8.5 3 额尔古纳河右岸 32.00 2019-6 人民文学出版社 迟子建 9.1 4 活着 20.00 2012-8 作家出版社 余华 9.4 5 明亮的夜晚 52 2023-8 台海出版社 [韩]崔恩荣/叶蕾 9.0 6 绝叫 58.00 2020-7 北京联合出版公司 [日] 叶真中显/林佩瑾 8.9 7 秋园 38.00 2020-6 北京联合出版公司 杨本芬 9.0 8 最后一个死去的女孩 69.00 2024-4 北京联合出版公司 [美] 哈里·多兰/仲召明 8.2 9 十八岁出门远行 45 2024-3 江苏凤凰文艺出版社 余华 7.4
- tail()浏览最后几条
book_df.tail(10) # 浏览最后几条
输出:
book_name price y publish author star 188 小王子 22.00 2003-8 人民文学出版社 [法] 圣埃克苏佩里 9.1 189 一桩事先张扬的凶杀案 25.00 2013-6 南海出版公司 [哥伦比亚] 加西亚·马尔克斯 8.7 190 请记得乐园 59 2024-4 人民文学出版社 那多 6.6 191 未来学大会 42.00 2021-8 译林出版社 [波] 斯坦尼斯瓦夫·莱姆 9.0 192 百年孤独 55.00 2017-8 南海出版公司 [哥伦比亚] 加西亚·马尔克斯 9.5 193 庆余年·壹 28.00 2008-7 中国友谊出版公司 猫腻 8.0 194 月亮和六便士 15.00 2006-8 上海译文出版社 [英] 毛姆/傅惟慈 9.0 195 孤岛的来访者 49.00 2023-4 新星出版社 [日] 方丈贵惠/穆迪 7.8 196 安南想象 78 2024-5 上海文艺出版社 朱琺 8.6 197 黄金时代 35.00 2017-4 北京十月文艺出版 王小波 8.7
2.info()
# 在pandas里可以将object看作是str
book_df.info() # 查看各列的数据个数和数据类型
# 可以用来判断是否有空数据 例如star里的197 数据总数应为198
# 所以star里就有个空数据NaN
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 198 entries, 0 to 197
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 book_name 198 non-null object
1 price 198 non-null object
2 y 198 non-null object
3 publish 198 non-null object
4 author 198 non-null object
5 star 197 non-null float64
dtypes: float64(1), object(5)
memory usage: 9.4+ KB
3.shape
book_df.shape # 数据的维度 以及各维度的值
输出:数据的维度 以及各维度的值
(198, 6)
4.describe()
book_df.describe() # 了解数据里数值的分布情况
输出:了解数据里数值的分布情况
star
count 197.000000
mean 8.580203
std 0.669575
min 5.800000
25% 8.200000
50% 8.700000
75% 9.100000
max 9.700000
标签:beijing,data,NaN,Pandas,索引,pd,Numpy,pandas,population
From: https://blog.csdn.net/weixin_65047977/article/details/140726396