dic_data = {‘a’:12,‘b’:14,‘c’:20}
obj = pd.Series(dic_data)
obj
ans:
使用字典的方式创建
a 12
b 14
c 20
dtype: int64
DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
- 创建方式1
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
pd.DataFrame(arr_data)
ans:
基于数组创建
0 1 2
0 a b c
1 d e f
- 创建方式2
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
ans:
指定索引创建
N1 N2 N3
0 a b c
1 d e f
- 根据索引获取值
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj[‘N2’] # 根据索引获取值
ans:
0 b
1 e
Name: N2, dtype: object
- 通过属性访问
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj.N2 # 通过属性访问
ans:
0 b
1 e
Name: N2, dtype: object
- 添加数据
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj[‘N4’]=[‘f’,‘g’] # 按索引添加数据
obj
ans:
N1 N2 N3 N4
0 a b c f
1 d e f g
- 删除数据
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj[‘N4’]=[‘f’,‘g’]
del obj[‘N2’] # del 删除数据
obj
ans:
N1 N3 N4
0 a c f
1 d f g
Pandas索引操作以及高级索引
索引对象
Pandas中的索引都是index对象,又称为索引对象,该对象不可修改。
索引对象不可修改的特性非常重要,这样使得多个数据结构之间能够很安全的共享index对象。
obj1=pd.Series(range(3),index=[‘a’,‘b’,‘c’])
obj2=pd.Series([‘a’,‘b’,‘c’],index=obj1.index)
obj1.index is obj2.index
ans:
True
重置索引
reindex()方法作用是对原索引和新索引进行匹配,即,新索引有缘索引的数据,而原索引数据按照新索引排序。
index, columns:要符合的新标签/索引
method:None 、 backfill 、 bfill、pad、ffill、nearest可选
fill_value:可指定填充缺失值
limit:向前或向后填充的最大连续元素数
DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
obj=pd.Series([1,2,3,4,5],index=[‘a’,‘b’,‘c’,‘d’,‘e’])
obj
obj1=obj.reindex([‘a’,‘b’,‘c’,‘x’,‘y’,‘z’]) # 重置索引
obj1
ans:
a 1.0
b 2.0
c 3.0
x NaN
y NaN
z NaN
dtype: float64
索引操作
- Series索引操作
Series的索引用法类似于Numpy数组的索引,但是Series的索引既可以通过索引的位置获取、也可以通过索引的名称获取。
obj=pd.Series([1,2,3,4,5],index=[‘a’,‘b’,‘c’,‘d’,‘e’])
obj[‘b’] # 通过索引的名称获取
obj[1] # 通过索引的位置获取
ans:
2
- 获取不连续的数据
obj=pd.Series([1,2,3,4,5],index=[‘a’,‘b’,‘c’,‘d’,‘e’])
obj[‘b’]
ans:
b 2
d 4
f 6
dtype: int64
- DataFrame的索引操作
DataFrame结构既可以包含行索引、也可以包含列索引。其中,行索引是通过index属性进行获取,列索引是通过columns属性进行获取。
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj.N2
ans:
0 b
1 e
Name: N2, dtype: object
- DataFrame获取不连续的Series对象
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,],[‘d’,‘e’,‘f’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’])
obj[[‘N1’,‘N3’]] # 不连续的Series对象
ans:
N1 N3
0 a c
1 d f
- 索引高级操作
loc:基于标签索引(索引名称),用于按标签选取数据。执行切片操作时,既包含起始索引又包含结束索引。
iloc:基于位置索引(整数索引),用于按位置选取数据。执行切片操作时,只包含起始索引,不包含结束索引。
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’,‘d’,‘e’],[‘d’,‘e’,‘f’,‘g’,‘h’]])
obj=pd.DataFrame(arr_data, columns=[‘N1’, ‘N2’, ‘N3’,‘N4’,‘N5’])
obj.loc[:,[‘N2’,‘N5’]] # 基于标签索引
obj.iloc[:,[1,4]] # 基于位置索引9999999999999999999999999999999999
ans:
N2 N5
0 b e
1 e h
数据排序
按索引排序
sort_index(axis=0, level=None, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, sort_remaining=True, by=None)
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据
kind:排序方法
obj=pd.Series([1,2,3,4,5],index=[‘a’,‘b’,‘c’,‘d’,‘e’])
obj.sort_index() # 升序
obj.sort_index(ascending=False)
ans:
Series按索引升序排序
a 1
b 2
c 3
d 4
e 5
dtype: int64
Series按索引降序排序
e 5
d 4
c 3
b 2
a 1
dtype: int64
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘c’],[‘f’,‘g’,‘h’],[‘d’,‘e’,‘x’]])
obj=pd.DataFrame(arr_data, index=[2,4,6])
obj.sort_index()
obj.sort_index(ascending=False)
ans
DataFrame按索引升序排序
0 1 2
2 a b c
4 f g h
6 d e x
DataFrame按索引降序排序
0 1 2
6 d e x
4 f g h
2 a b c
按值排序
参数即用法同按索引排序。
Series按值排序
obj=pd.Series([1,4,3,8,5],index=[‘a’,‘b’,‘c’,‘d’,‘e’])
obj.sort_values() # 升序
ans:
a 1
c 3
b 4
e 5
d 8
dtype: int64
obj.sort_values(ascending=False) # 降序
d 8
e 5
b 4
c 3
a 1
dtype: int64
import numpy as np
import pandas as pd
arr_data = np.array([[‘a’,‘b’,‘y’],[‘f’,‘g’,‘h’],[‘d’,‘e’,‘x’]])
obj=pd.DataFrame(arr_data, index=[2,4,6])
obj
ans:
0 1 2
2 a b y
4 f g h
6 d e x
obj.sort_values(by=2) # 对索引为2的数据排序
0 1 2
4 f g h
6 d e x
2 a b y
读写数据操作
读写CSV文件
Pandas为我们提供了read_csv读取CSV文件,该函数涉及参数较多,但是只有几个常用,具体的在这里我就不一一列举,感兴趣的可以看看这个博客read_csv()。下面写个实例看看怎么使用。
import pandas as pd
f = open(r’E:\python\pythonProject3\venv\Include\电影.csv’,encoding=‘utf-8’)
data = pd.read_csv(f) # 读取csv文件,以‘,’作为分隔
data
读取txt文件
import pandas as pd
f = open(r’E:\python\pythonProject3\venv\Include\电影.txt’,encoding=‘utf-8’)
data = pd.read_table(f) # 读取txt文件,以‘\t’作为分隔
data
读取Excel文件
import pandas as pd
data = pd.read_excel(r’E:\python\pythonProject3\venv\Include\ip.xlsx’) # 读取Excel文件,读取后转换成DataFrame对象
data
读取MySQL数据库
pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
sql:SQL命令字符串
con:连接sql数据库的engine,一般可以用SQLalchemy或者pymysql之类的包建立
index_col: 选择某一列作为index
coerce_float:非常有用,将数字形式的字符串直接以float型读入
columns:要选取的列。一般没啥用,因为在sql命令里面一般就指定要选择的列了
import pandas as pd
import MySQLdb
mysql_cn= MySQLdb.connect(host=‘localhost’, port=3306,user=‘root’, passwd=‘123456’, db=‘movies’)
df = pd.read_sql(‘select * from movice;’, con=mysql_cn)
mysql_cn.close()
df
读取mongodb数据库
读取mongodb同样需要安装驱动,先安装pymongo。
import pandas as pd
import pymongo
client = pymongo.MongoClient(host=‘localhost’,port=27017)
db = client.movies
collection = db.movie
data = pd.DataFrame(list(collection.find()))
data
数据预处理
空值和缺失值处理
在python里面一般空值使用None表示,缺失值使用NaN表示。Pandas中提供了一些用于检查或处理空值和缺失值的函数。
- isnull()函数
该函数的参数只有一个,表示检查空值的对象。
import pandas as pd
from pandas import DataFrame,Series
from numpy import NaN
obj = Series([1,None,NaN])
pd.isnull(obj) # isnull()函数检查缺失值或者空值
ans:
0 False
1 True
2 True # 空值返回True
dtype: bool
- notnull()函数
import pandas as pd
from pandas import DataFrame,Series
from numpy import NaN
obj = Series([1,None,NaN])
pd.notnull(obj) # notnull()函数检查缺失值或者空值
ans:
0 True
1 False
2 False
dtype: bool # 空值返回False
groupby()数据分组
- 通过列名分组
import pandas as pd
df=pd.DataFrame({“key1”:[‘a’,‘d’,‘f’,‘d’,‘a’,‘f’],
“data”:[‘2’,‘5’,‘6’,‘8’,‘9’,‘2’]})
obj=df.groupby(by=“key1”) # 返回一个可迭代对象
for item in obj:
print(item)
ans:
结果为三个元组,所有key1相同的数据放在一起
三个数依次为 下标 键 值
(‘a’, key1 data
0 a 2
4 a 9)
(‘d’, key1 data
1 d 5
3 d 8)
(‘f’, key1 data
2 f 6
5 f 2)
- 通过Series对象分组
import pandas as pd
df=pd.DataFrame({“key1”:[‘a’,‘d’,‘f’,‘d’,‘a’,‘f’],
“key2”:[‘A’,‘D’,‘F’,‘D’,‘A’,‘F’],
“data1”:[‘2’,‘5’,‘6’,‘8’,‘9’,‘2’],
“data2”:[‘4’,‘7’,‘3’,‘6’,‘8’,‘2’]})
se=pd.Series([‘A’,‘B’,‘C’,“D”])
obj=df.groupby(by=se)
for item in obj:
print(item)
ans:
(‘A’, key1 key2 data1 data2
0 a A 2 4)
(‘B’, key1 key2 data1 data2
1 d D 5 7)
(‘C’, key1 key2 data1 data2
2 f F 6 3)
(‘D’, key1 key2 data1 data2
3 d D 8 6)
se将df对象分为A B C D四组
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
=se)
for item in obj:
print(item)
ans:
(‘A’, key1 key2 data1 data2
0 a A 2 4)
(‘B’, key1 key2 data1 data2
1 d D 5 7)
(‘C’, key1 key2 data1 data2
2 f F 6 3)
(‘D’, key1 key2 data1 data2
3 d D 8 6)
se将df对象分为A B C D四组
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-yzaSWHaC-1713222642458)]
[外链图片转存中…(img-pNIEcRPn-1713222642458)]
[外链图片转存中…(img-rsS9iN6M-1713222642459)]
[外链图片转存中…(img-Gxzv1dAN-1713222642459)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)