Pandas 数据结构
pandas.Series()(一维结构)
-
作用:Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
Series 由索引(index)和列组成
-
格式:pd.Series( data, index, dtype, name, copy)
-
参数:
-
data:一组数据(ndarray 类型)。
-
index:数据索引标签,如果不指定,默认从 0 开始。
-
dtype:数据类型,默认会自己判断。
-
name:设置名称。
-
copy:拷贝数据,默认为 False。
-
数组创建(任何类型的都可以)
import pandas as pd pd = pd.Series([1,3,5,"nihao",6,8]) print(pd)
输出结果:
0 1 1 3 2 5 3 nihao 4 6 5 8 dtype: object
字典创建
-
格式:pd.Series(字典名,index=[值])
import pandas as pd sites = {1: "Google", 2: "Runoob", 3: "Wiki"} myvar = pd.Series(sites) print(myvar) print() a = pd.Series(sites, index=[1,2]) #用key来查看数据 print(a)
输出的结果:
1 Google 2 Runoob 3 Wiki dtype: object 1 Google 2 Runoob dtype: object
通过索引修改标签
import pandas as pd pd = pd.Series([1,3,5,"nihao",6,8], index=["a","b","c","d","e","f"]) print(pd)
输出结果:
a 1 b 3 c 5 d nihao e 6 f 8 dtype: object
查看series中的 元素值
-
格式:series变量名.values # 返回一个装有元素的列表
import pandas as pd import numpy as np a = pd.Series([1,3,5,np.nan,6, 8]) b = a.values print(b)
输出结果:
[ 1. 3. 5. nan 6. 8.]
查看series中的 索引值
-
格式:series变量名.index # 返回一个装有索引值的列表
import pandas as pd import numpy as np a = pd.Series([1,3,5,np.nan,6, 8]) b = a.index print(b)
输出结果:
RangeIndex(start=0, stop=6, step=1)
series中的 切片操作
-
格式:变量名[n: m: 步长] #和列表的切片一样的操作,返回一个seies类型
import pandas as pd import numpy as np a = pd.Series([1,3,5,np.nan,6, 8]) print(a[::2])
series中的 索引赋值
-
格式:变量名.index.name = sth
-
参数:sth:填入索引的名字
import pandas as pd import numpy as np a = pd.Series([1,3,5,np.nan,6, 8]) a.index.name="索引" print(a)
索引 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
根据 索引值 读取数据
-
格式:变量名[索引] #返回索引对应的元素
import pandas as pd pd = pd.Series([1,3,5,"nihao",6,8], index=["a","b","c","d","e","f"]) print(pd["b"])
3
创建一段时间序列Series
-
格式:pd.date_range('time',periods=num)
-
参数:time:填写时间数字
num:该Series的长度
import pandas as pd date = pd.date_range('20181010', periods=6) print(date)
输出结果:
DatetimeIndex(['2018-10-10', '2018-10-11', '2018-10-12', '2018-10-13', '2018-10-14', '2018-10-15'], dtype='datetime64[ns]', freq='D')
pandas.DataFrame()(二维结构)
-
格式:pandas.DataFrame( data, index, columns, dtype, copy)
-
参数说明:
-
data:一组数据(ndarray、series, map, lists, dict 等类型)。
-
index:索引值,或者可以称为行标签。
-
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
-
dtype:数据类型。
-
copy:拷贝数据,默认为 False。
-
创建DataFrame
1、字典创建
-
规则:每一个key都相当一列数据
import pandas as pd data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]} df = pd.DataFrame(data) print (df)
输出结果:
Site Age 0 Google 10 1 Runoob 12 2 Wiki 13
2、数组创建
import pandas as pd data = [['Google',10],['Runoob',12],['Wiki',13]] df = pd.DataFrame(data,columns=['Site','Age'],dtype=float) print(df)
输出结果:
Site Age 0 Google 10.0 1 Runoob 12.0 2 Wiki 13.0
DateFrame修改行标签和列标签
-
格式:pd.DataFrame(date, index=name1, columns=name2)
-
参数:
-
date:数组或字典
-
name1:一个一维结构
-
name2:一个一维结构
-
import pandas as pd date = pd.date_range('20181010', periods=6) df = pd.DataFrame(np.random.randn(6, 4),index=date,columns=list("abcd")) print(df)
输出结果:
a b c d 2018-10-10 0.250326 -0.960180 0.878228 -0.303692 2018-10-11 1.158560 -2.243116 0.728646 0.182529 2018-10-12 -1.302296 -0.379934 -0.707340 -0.085085 2018-10-13 0.699283 0.727865 -1.912914 -1.615879 2018-10-14 0.036541 0.820634 -0.369240 -0.678624 2018-10-15 -0.004778 1.088514 0.434265 -2.795287
DataFrame的数据查看
1、查看头尾数据
-
格式:df.head(num) #查看开头的数据
df.tail(num) #查看结尾的数据
-
参数:df:DataFrame类型的变量名
num:表示要查看的行数,默认为5
import pandas as pd date = pd.date_range('20181010', periods=6) df = pd.DataFrame(np.random.randn(6, 4),index=date,columns=list("abcd")) a = df.head() b = df.tail(3) print(a) print() print(b)
输出结果:
a b c d 2018-10-10 0.884416 -0.596544 0.291676 -1.665636 2018-10-11 -0.549690 -0.764856 -0.759004 -1.279359 2018-10-12 -0.402498 -0.346603 -1.304580 1.402060 2018-10-13 0.899449 0.850684 -1.381475 0.591909 2018-10-14 1.124828 0.075241 -1.488315 1.742104 a b c d 2018-10-13 0.899449 0.850684 -1.381475 0.591909 2018-10-14 1.124828 0.075241 -1.488315 1.742104 2018-10-15 1.460785 0.162398 0.058642 0.982680
2、查看 行标签
-
格式:df.index (返回一个含有行标签的一维结构)
import pandas as pd date = pd.date_range('20181010', periods=6) df = pd.DataFrame(np.random.randn(6, 4),index=date,columns=list("abcd")) print(df.index)
输出结果:
DatetimeIndex(['2018-10-10', '2018-10-11', '2018-10-12', '2018-10-13', '2018-10-14', '2018-10-15'], dtype='datetime64[ns]', freq='D')
3、查看 列标签
-
格式:df.columns
-
参数:df:DataFrame类型的变量名
import pandas as pd date = pd.date_range('20181010', periods=6) df = pd.DataFrame(np.random.randn(6, 4),index=date,columns=list("abcd")) print(df.columns)
输出结果:
Index(['a', 'b', 'c', 'd'], dtype='object')
4、查看 具体数据值
-
格式:df.values
-
参数:df:DataFrame类型的变量名
import pandas as pd date = pd.date_range('20181010', periods=6) df = pd.DataFrame(np.random.randn(6, 4),index=date,columns=list("abcd")) print(df.values)
输出结果:
[[ 1.41232814 1.06276238 1.17474692 0.89057379] [ 0.08332357 -0.03581437 -1.18219557 -0.27808901] [-0.82514546 0.67888286 -0.90839732 0.62961124] [ 0.20796877 -1.07239015 1.03328507 1.2404484 ] [ 0.50036167 -1.445475 1.38172177 0.42885936] [-0.98025886 -0.42023525 -1.00091037 -0.36920668]]
DataFrame的数据操作
1、行操作
查看行数据(.iloc()函数)
-
格式:df.iloc[index]
df.loc[index1:index2] #从index1到index2的所有数据,包括index2
-
参数:index:行的下标
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df.iloc[1]) print(df.loc[1:3])
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 名称 控方证人 评分 9.5 产地 美国 上映时间 1957 时长 116 首映地点 美国 Name: 1, dtype: object 名称 评分 产地 上映时间 时长 首映地点 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映
添加行数据(.append()函数)
-
格式:df = df.append(sr)
-
参数:sr:指一个series数据
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") dit = {"名称":'复仇者联盟3', '评分':8.4, '产地':'美国', '上映时间':2018, '时长':200, '首映地点':'美国'} s = pd.Series(dit) s.name=6 df = df.append(s) print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 复仇者联盟3 8.4 美国 2018 200 美国
删除行数据(.drop()函数)
-
格式:df = df.drop([index],axis) #删除索引对应的行,要进行赋值
df.drop([index],inplace=True) #直接删除 df 中的对应行,直接返回DataFrame类型
-
参数:index:行标签
axis:默认为0
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() df = df.drop([5]) print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港
2、列操作
查看列数据 (索引)
-
格式:df.columns #返回一个含有所有的列标签的数组
df[name]【n : m:num] #返回name列下n到m的步长为num的数据
df[[name1,name2,name3...]] #返回多列的数据
-
参数:index:行标签
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df.columns) print() print(df['产地'][1:3]) print() print(df[['产地','上映时间','名称']])
输出结果:
Index(['名称', '评分', '产地', '上映时间', '时长', '首映地点'], dtype='object') 1 美国 2 意大利 Name: 产地, dtype: object 产地 上映时间 名称 0 美国 1994 肖生克的救赎 1 美国 1957 控方证人 2 意大利 1997 美丽人生 3 美国 1994 阿甘正传 4 中国大陆 1993 霸王别姬 5 美国 2012 泰坦尼克号
添加列数据
-
格式:df[name]=list
-
参数:name:要添加的列的名字
list:要添加元素所构成的列表
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df['序号']=list('abcdef') print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 2 美丽人生 9.5 意大利 1997 116 意大利 c 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 4 霸王别姬 9.4 中国大陆 1993 171 香港 e 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f
删除列数据(.drop()函数)
-
格式:df=df.drop(name,axis=1)
-
参数:name:列的名称
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) df=df.drop('上映时间',axis=1) print() print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 名称 评分 产地 时长 首映地点 0 肖生克的救赎 9.8 美国 142 多伦多电影节 1 控方证人 9.5 美国 116 美国 2 美丽人生 9.5 意大利 116 意大利 3 阿甘正传 9.4 美国 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 171 香港 5 泰坦尼克号 9.4 美国 194 中国大陆
3、通过标签选择数据
-
格式:df.loc[[index],[columns]]
-
参数:index:行标签
columns:列标签
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() a = df.loc[3,'名称'] print(a) print(df.loc[[1,2,3],['名称','上映时间']])
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 阿甘正传 名称 上映时间 1 控方证人 1957 2 美丽人生 1997 3 阿甘正传 1994
4、条件选择
运用"=="选择数据
-
格式:df['columns']=='name' #返回一个Ture和FALSE的Series
df.columns=='name'
-
参数:columns:表示列标签
name:列标签中的某个元素
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df['产地']=='意大利') print() print(df[df['产地']=='意大利'])
输出结果:
0 False 1 False 2 True 3 False 4 False 5 False 6 False 7 False 8 False Name: 产地, dtype: bool 名称 评分 产地 上映时间 时长 首映地点 2 美丽人生 9.5 意大利 1997 116 意大利
运用"()&()"选择数据(and条件)
-
格式:df[(条件1)&(条件2)] #返回一个同时满足所有条件的数据DataFrame
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df=df[(df.产地=='美国')&(df.评分<9.4)] print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国
运用"()|()"选择数据(or条件)
-
格式:df[(条件1)|(条件2)] #返回一个只要满足任一条件的数据DataFrame
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df=df[((df.产地=='美国')|(df.产地=='意大利'))&(df.评分<9.6)] print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国
5、修改某一元素(对单个数据修改)
-
格式:df.loc[index, columns]=sth
-
参数:index:要修改元素的行标签
columns:要修改元素的列标签
sth:要修改成的值
df:DataFrame的名称
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() df.loc[5,"名称"]="海宝来了" print(df)
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 海宝来了 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国
6、替换某一元素(可对多个数据操作)
-
格式:df[columns_name].replace(former, later, inplace) (替换一对值)
df[columns_name].replace([former1, later1], [former2, later2] , inplace) (替换多对值)
-
参数:columns_name:列的名称
former:要替换的元素
later:要提换成的内容
inplace:默认为False,返回替换后的列的Series;等于True时,将替换的列覆盖到原数据,该表达式返回none
-
作用:将对应列的所有former替换为later
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df["产地"].replace('美国', '中国')) print() print(df["产地"].replace('美国', '中国', inplace=True)) df['产地'].replace('美国','中国',inplace=True) print(df)
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 0 中国 1 中国 2 意大利 3 中国 4 中国大陆 5 中国 6 中国 7 中国 8 中国 Name: 产地, dtype: object None 名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 中国 1994 142 多伦多电影节 1 控方证人 9.5 中国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 中国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 中国 2012 194 中国大陆 6 机器人总动员 9.3 中国 2008 98 美国 7 疯狂动物城 9.3 中国 2016 109 美国 8 城市之光 9.2 中国 1931 87 美国
pandas 数据处理
缺失值处理(对空白内容做处理)
方法 | 说明 |
---|---|
dropna | 根据标签中的缺失值进行过滤,删除缺失值 |
fillna | 对缺失值进行填充 |
isnull | 返回一个布尔值对象,判断哪些值是缺失值 |
notnull | isnull的否定式 |
1、判断缺失值
-
格式:df.isnull() #对所有的数据进行判断是否为缺失值,返回False和True的DataFrame
df[columns].isnull() #对columns列的数据进行判断,并返回DataFrame
-
参数:columns:列的名称
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df["序号"]=['a','b',np.nan,'d',np.nan,'f','g',np.nan,'h'] print(df) print() a=df['序号'].isnull() print(a) print() print(df[a])
输出结果:
名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 2 美丽人生 9.5 意大利 1997 116 意大利 NaN 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 4 霸王别姬 9.4 中国大陆 1993 171 香港 NaN 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f 6 机器人总动员 9.3 美国 2008 98 美国 g 7 疯狂动物城 9.3 美国 2016 109 美国 NaN 8 城市之光 9.2 美国 1931 87 美国 h 0 False 1 False 2 True 3 False 4 True 5 False 6 False 7 True 8 False Name: 序号, dtype: bool 名称 评分 产地 上映时间 时长 首映地点 序号 2 美丽人生 9.5 意大利 1997 116 意大利 NaN 4 霸王别姬 9.4 中国大陆 1993 171 香港 NaN 7 疯狂动物城 9.3 美国 2016 109 美国 NaN
-
notnull()同理
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df["序号"]=['a','b',np.nan,'d',np.nan,'f','g',np.nan,'h'] print(df) #原表格 print() a=df['序号'].notnull() #判断缺失值 print(a) print() print(df[a]) #打印不是缺失值的DataFrame
输出结果:
名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 2 美丽人生 9.5 意大利 1997 116 意大利 NaN 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 4 霸王别姬 9.4 中国大陆 1993 171 香港 NaN 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f 6 机器人总动员 9.3 美国 2008 98 美国 g 7 疯狂动物城 9.3 美国 2016 109 美国 NaN 8 城市之光 9.2 美国 1931 87 美国 h 0 True 1 True 2 False 3 True 4 False 5 True 6 True 7 False 8 True Name: 序号, dtype: bool 名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f 6 机器人总动员 9.3 美国 2008 98 美国 g 8 城市之光 9.2 美国 1931 87 美国 h
2、填充缺失值
-
格式:df[name].fillna(sth,inplace=True)
-
参数:name:缺失值所对应的列名称 ,无定义时表示对全部缺失值数据填充
sth:缺失值要填充的内容
inplace:True表示将df[name]中缺失值替代为填充值
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df["序号"]=['a','b',np.nan,'d',np.nan,'f','g',np.nan,'h'] #构建含有缺失值的DataFrame print(df) df['序号'].fillna(0,inplace=True) print() print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 2 美丽人生 9.5 意大利 1997 116 意大利 NaN 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 4 霸王别姬 9.4 中国大陆 1993 171 香港 NaN 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f 6 机器人总动员 9.3 美国 2008 98 美国 g 7 疯狂动物城 9.3 美国 2016 109 美国 NaN 8 城市之光 9.2 美国 1931 87 美国 h 名称 评分 产地 上映时间 时长 首映地点 序号 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 a 1 控方证人 9.5 美国 1957 116 美国 b 2 美丽人生 9.5 意大利 1997 116 意大利 0 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 d 4 霸王别姬 9.4 中国大陆 1993 171 香港 0 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 f 6 机器人总动员 9.3 美国 2008 98 美国 g 7 疯狂动物城 9.3 美国 2016 109 美国 0 8 城市之光 9.2 美国 1931 87 美国 h
3、删除缺失值
-
格式:df.dropna(how,axis,inplace)
-
参数:how:为'all'意味删除全为空值的行和列,为any意味删除每行每列中有至少一个空值的行和列
axis:默认为0
inplace:=True表示覆盖原dataFrame,False表示不覆盖
import pandas as pd import numpy as np df = pd.DataFrame([[1,np.nan,2,np.nan],[2,3,5,np.nan],[2,np.nan,4,np.nan]], index=list("abcd"), columns=list("1234")) print(df) print() print(df.dropna(how='all',axis="columns"))
输出结果:
1 2 3 4 a 1 NaN 2 NaN b 2 3.0 5 NaN c 2 NaN 4 NaN 1 2 3 a 1 NaN 2 b 2 3.0 5 c 2 NaN 4
-
df.dropna(inplace=True) #该操作是一个函数操作,返回none
import pandas as pd import numpy as np df = pd.DataFrame([[1,np.nan,2,np.nan],[2,3,5,np.nan],[2,np.nan,4,np.nan]], index=list("abc"), columns=list("1234")) print(df) print() df.dropna(inplace=True,axis=1) print(df)
输出结果:
1 2 3 4 a 1 NaN 2 NaN b 2 3.0 5 NaN c 2 NaN 4 NaN 1 3 a 1 2 b 2 5 c 2 4
异常值处理(认为不妥的数据提取并处理)
-
通过条件选择挑选出需要的数据,即异常值,再对异常值进行数据处理(和DataFrame的数据处理一样)
合并DataFrame数据
1、merage()函数
-
格式:new_df = pd.merge(df1, df2, on='key')
-
参数:key:为两个df都存在的列
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df1 = df[:5] df2 = df[-5::-1]
2、append()函数
3、join()函数
4、concat()函数
pandas 从excel导入数据
-
格式:df = pd.read_execel(r"文件路径“)
pandas 数据excel保存
-
格式:df.to_excel(r"文件路径“)
pandas 数据格式转换
查看数据类型
-
格式:df["name"],dtype #返回数据的类型
-
参数:name:要查看的行或列的名称
import pandas as pd import numpy as np df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df["评分"].dtype)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 float64
数据格式转换
-
格式:df[name]=df[name].astype("type") #直接修改原表格的数据类型
-
参数:name:行或列的名称
type:要转化的数据类型
-
df[name].astype("type") #返回一个修改过后的列或行的Series
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df["评分"].astype("int")) print() df["评分"]=df["评分"].astype("int") print(df)
输出结果:
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 Name: 评分, dtype: int32 名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9 美国 1994 142 多伦多电影节 1 控方证人 9 美国 1957 116 美国 2 美丽人生 9 意大利 1997 116 意大利 3 阿甘正传 9 美国 1994 142 洛杉矶首映 4 霸王别姬 9 中国大陆 1993 171 香港 5 泰坦尼克号 9 美国 2012 194 中国大陆 6 机器人总动员 9 美国 2008 98 美国 7 疯狂动物城 9 美国 2016 109 美国 8 城市之光 9 美国 1931 87 美国
pandas 数据排序
单个值排列
-
格式:df.sort_values(by='name',ascending)
-
参数:name:列的名称
ascending:等于False时表示降序排列,为True时表示升序排列,默认升序
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df.sort_values(by="上映时间", ascending=False))
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 名称 评分 产地 上映时间 时长 首映地点 7 疯狂动物城 9.3 美国 2016 109 美国 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 2 美丽人生 9.5 意大利 1997 116 意大利 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 1 控方证人 9.5 美国 1957 116 美国 8 城市之光 9.2 美国 1931 87 美国
多值排列
-
格式:df.sort_values([name1, name2,...], ascending) #先进行name1排列,在进行name2排列
-
参数:name:列的名称
ascending:默认升序
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") df = df[:7] print(df) print() print(df.sort_values(['评分','时长']))
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 名称 评分 产地 上映时间 时长 首映地点 6 机器人总动员 9.3 美国 2008 98 美国 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节
pandas 数据基本统计分析
描述性统计(.describe()函数)
-
格式:df.describe() #返回一个DataFrame类型
-
用途:统计数值型数据的一些基本数值,如中位数,最大,最小等等
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") a = df.describe() print(a)
评分 上映时间 时长 count 9.000000 9.000000 9.000000 mean 9.422222 1989.111111 130.555556 std 0.171594 27.696771 34.943208 min 9.200000 1931.000000 87.000000 25% 9.300000 1993.000000 109.000000 50% 9.400000 1994.000000 116.000000 75% 9.500000 2008.000000 142.000000 max 9.800000 2016.000000 194.000000
最值统计(.max()/.min()函数)
-
格式:df[name].max() #返回name列下的最大值
df[name].min() #返回name列下的最小值
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df["上映时间"].max()) print(df["时长"].min())
2016 87
均值和中值
-
格式:df[name].mean() #返回name列下的均值
df[name].median() #返回name列下的中位数(类型均为float型)
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df["上映时间"].mean()) print(df["时长"].median())
1989.111111111111 116.0
方差和标准差
-
格式:df[name].var() #返回name列下的数据的方差
df[name].std() #返回name列下的标准差(类型均为float型)
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df["上映时间"].var()) print(df["时长"].std())
求和
-
格式:df[name].sum() #返回name列下的数据的求和
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df["上映时间"].sum())
17902
相关系数,协方差
-
格式:df.[[name1, name2]].corr() #返回name1和name2相关系数的一个DataFrame
df.[[name1, name2]].cov() #返回name1和name2协方差的一个DataFrame
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df[["评分","时长"]].corr()) print(df[["评分","时长"]].cov())
评分 时长 评分 1.000000 0.329152 时长 0.329152 1.000000 评分 时长 评分 0.029444 1.973611 时长 1.973611 1221.027778
计数
1、计算行数据
-
格式:len(df)
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(len(df))
9
2、计算某列下不同元素的个数
-
格式:df[name].unque() #返回一个含有name中元素的数组
len(df[name].unque()) #返回一个数
-
参数:name:列的名称
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() a = df["评分"].unique() print(a) len(a)
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 [9.8 9.5 9.4 9.3 9.2] 5
3、计算某列的每个不同元素所出现的次数
-
格式:df[name].value_counts() (返回一个name列的每个不同元素所出现的次数所构成的Series)
-
参数:name:列的名字
import pandas as pd df = pd.read_excel(r"C:\Users\梁家华\Desktop\工作簿1.xlsx") print(df) print() print(df['评分'].value_counts())
名称 评分 产地 上映时间 时长 首映地点 0 肖生克的救赎 9.8 美国 1994 142 多伦多电影节 1 控方证人 9.5 美国 1957 116 美国 2 美丽人生 9.5 意大利 1997 116 意大利 3 阿甘正传 9.4 美国 1994 142 洛杉矶首映 4 霸王别姬 9.4 中国大陆 1993 171 香港 5 泰坦尼克号 9.4 美国 2012 194 中国大陆 6 机器人总动员 9.3 美国 2008 98 美国 7 疯狂动物城 9.3 美国 2016 109 美国 8 城市之光 9.2 美国 1931 87 美国 9.4 3 9.3 2 9.5 2 9.8 1 9.2 1 Name: 评分, dtype: int64