Python——Pandas的基本使用方法(2)

1.3 创建DataFrame

  • pd.DataFrame(data, index, columns)

(1)data:数据,格式包含列表、字典或Series的字典、二维ndarray、 Series对象、另一个DataFrame

(2)index:索引,默认采用整型整数作为index

(3)columns:列名

1.3.1 从字典创建

# 1.创建一个字典
d = {"one": [1,2,3,5],"two":[4,5,9,1]}  

# 2.使用dataframe格式
df = pd.DataFrame(d)  

# 3.查看数据
df

# 4.得到的数据为
one	two
0	1	4
1	2	5
2	3	9
3	5	1

1.3.2从Series创建

  • 可从一个Series对象直接创建一个DataFrame

# 1.通过切片操作来读取iris.csv文件中的Petal.Length列的前5行数据
ts = data["Petal.Length"].head(5)  

# 2.查看数据的结构
print(type(ts)) 

# 3.查看结果
ts

# 4.得到的结果为
<class 'pandas.core.series.Series'>
0    1.4
1    1.4
2    1.3
3    1.5
4    1.4
Name: Petal.Length, dtype: float64

# 5.将其转变成dataframe格式
df = pd.DataFrame(ts)

# 6.查看数据的结构
print(type(df))

# 7.查看结果
df

# 8.得到的结果为
<class 'pandas.core.frame.DataFrame'>
Petal.Length
0	1.4
1	1.4
2	1.3
3	1.5
4	1.4

1.3.3 DataFrame的常见操作

  • (1)查看前n行数据与最后n行数据
# 1.查看前n行数据
data.head(5)

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
0	1	5.1	3.5	1.4	0.2	setosa
1	2	4.9	3.0	1.4	0.2	setosa
2	3	4.7	3.2	1.3	0.2	setosa
3	4	4.6	3.1	1.5	0.2	setosa
4	5	5.0	3.6	1.4	0.2	setosa

# 3.查看最后n行数据
data.tail(5)

# 4.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
145	146	6.7	3.0	5.2	2.3	virginica
146	147	6.3	2.5	5.0	1.9	virginica
147	148	6.5	3.0	5.2	2.0	virginica
148	149	6.2	3.4	5.4	2.3	virginica
149	150	5.9	3.0	5.1	1.8	virginica
  • (2)查看DataFrame的形状,即行数和列数
# 1.查看DataFrame的形状,即行数和列数
data.shape

# 2.得到的结果为
(150, 6)
  • (3) 查看索引、数据类型和内存占用信息
# 1.查看索引、数据类型和内存占用信息
data.info()

# 2.得到的结果为
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 6 columns):
Unnamed: 0      150 non-null int64
Sepal.Length    150 non-null float64
Sepal.Width     150 non-null float64
Petal.Length    150 non-null float64
Petal.Width     150 non-null float64
Species         150 non-null object
dtypes: float64(4), int64(1), object(1)
memory usage: 7.2+ KB
  • (4)查看数值列的汇总信息
# 1.查看数值列的汇总信息
data.describe()

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width
count	150.000000	150.000000	150.000000	150.000000	150.000000
mean	75.500000	5.843333	3.057333	3.758000	1.199333
std	43.445368	0.828066	0.435866	1.765298	0.762238
min	1.000000	4.300000	2.000000	1.000000	0.100000
25%	38.250000	5.100000	2.800000	1.600000	0.300000
50%	75.500000	5.800000	3.000000	4.350000	1.300000
75%	112.750000	6.400000	3.300000	5.100000	1.800000
max	150.000000	7.900000	4.400000	6.900000	2.500000
  • (5)数据筛选
# 1.数据筛选:选取Petal.Length中的小于1.3的值
data[data["Petal.Length"] < 1.3]  

# 2.得到的结果为
	Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
13	14	4.3	3.0	1.1	0.1	setosa
14	15	5.8	4.0	1.2	0.2	setosa
22	23	4.6	3.6	1.0	0.2	setosa
35	36	5.0	3.2	1.2	0.2	setosa
  • (6)增加列
# 1.创建一个字典
d = {"setosa":1,"versicolor":2,"virginica":3}  

# 2.# map接收字典d,然后根据"Species"的值来确定label的值
data["label"] = data["Species"].map(d) 

# 3.查看结果
print(data)

# 4.得到的结果为
Unnamed: 0  Sepal.Length  Sepal.Width  Petal.Length  Petal.Width  \
0             1           5.1          3.5           1.4          0.2   
1             2           4.9          3.0           1.4          0.2   
2             3           4.7          3.2           1.3          0.2   
3             4           4.6          3.1           1.5          0.2   
4             5           5.0          3.6           1.4          0.2   
..          ...           ...          ...           ...          ...   
145         146           6.7          3.0           5.2          2.3   
146         147           6.3          2.5           5.0          1.9   
147         148           6.5          3.0           5.2          2.0   
148         149           6.2          3.4           5.4          2.3   
149         150           5.9          3.0           5.1          1.8   

       Species  label  
0       setosa      1  
1       setosa      1  
2       setosa      1  
3       setosa      1  
4       setosa      1  
..         ...    ...  
145  virginica      3  
146  virginica      3  
147  virginica      3  
148  virginica      3  
149  virginica      3  

[150 rows x 7 columns]
  • (7)删除列
# 1.删除Species列
del data["Species"] 

# 2.查看前两行数据
data.head(2)

# 3.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	label
0	1	5.1	3.5	1.4	0.2	1
1	2	4.9	3.0	1.4	0.2	1
  • (8)修改列名
# 1. 把原来的列名与最终想要的列名形成字典
d = {"Sepal.Length":"a","Sepal.Width":"b"}

# 2.修改列名
data.rename(columns=d).head(2) 

# 3.得到的结果为
	Unnamed: 0	a	b	Petal.Length	Petal.Width	label
0	1	5.1	3.5	1.4	0.2	1
1	2	4.9	3.0	1.4	0.2	1

2.数据探索与统计

2.1 汇总统计

  • 相关的汇总统计方法有如下这些:count、describe、min、max、cumsum、cumprod、sum、mean、median、var、std、idmin、idmax、diff、skew、kurt
  • 这里以describe()方法为例子
  • describe()方法默认返回以下信息
count非空值的数量
mean平均值
std标准差
min最小值
max最大值
25%四分之一分位数
50%二分之一分位数
75%四分之三分位数
# 1. 汇总统计:describe()方法
data = pd.read_csv(r"C:/XXX/xxx/Documents/mycrawlers/数据分析与可视化/实验二——Pandas的基本使用方法/iris.csv")

# 2.查看数据
data.describe()

# 3.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width
count	150.000000	150.000000	150.000000	150.000000	150.000000
mean	75.500000	5.843333	3.057333	3.758000	1.199333
std	43.445368	0.828066	0.435866	1.765298	0.762238
min	1.000000	4.300000	2.000000	1.000000	0.100000
25%	38.250000	5.100000	2.800000	1.600000	0.300000
50%	75.500000	5.800000	3.000000	4.350000	1.300000
75%	112.750000	6.400000	3.300000	5.100000	1.800000
max	150.000000	7.900000	4.400000	6.900000	2.500000

2.2 变量之间的相关性  

2.2.1 COV方法——计算协方差
  • numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)
m一个一维或二维的变量。 变量为列
y它与m的形式相同
rowvar如果rowvar为True(默认),那么每一行代表一个变量,列中有观测值。否则,关系被转置
bias默认的归一化是假的。如果bias是True,它将对数据点进行标准化处理
ddof如果不是无,则会覆盖bias所暗示的默认值。请注意,ddof=1将返回无偏估计,即使同时指定了fweights和aweights
fweights是整数频率权重的一维数组
aweights是观察向量权重的一维数组
# 1.计算的是DataFrame列与列的协方差
data.cov()

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width
Unnamed: 0	1887.500000	25.782886	-7.618121	67.692953	29.805034
Sepal.Length	25.782886	0.685694	-0.042434	1.274315	0.516271
Sepal.Width	-7.618121	-0.042434	0.189979	-0.329656	-0.121639
Petal.Length	67.692953	1.274315	-0.329656	3.116278	1.295609
Petal.Width	29.805034	0.516271	-0.121639	1.295609	0.581006

# 3.指定两列计算其协方差
print(data["Sepal.Length"].cov(data["Petal.Length"]))

# 4.得到的结果为
1.2743154362416107
2.2.2CORR方法——计算相关系数
  • dataframe.corr(method='pearson', min_periods=1)
method可选值为{‘pearson’, ‘kendall’, ‘spearman’}
  • Pearson相关系数来衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差
  • Kendall用于反映分类变量相关性的指标,即针对无序序列的相关系数,非正太分布的数据
  • Spearman非线性的,非正太分布的数据的相关系数
min_periods样本最少的数据量
# 1.算变量之间的相关系数
data.corr() 

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width
Unnamed: 0	1.000000	0.716676	-0.402301	0.882637	0.900027
Sepal.Length	0.716676	1.000000	-0.117570	0.871754	0.817941
Sepal.Width	-0.402301	-0.117570	1.000000	-0.428440	-0.366126
Petal.Length	0.882637	0.871754	-0.428440	1.000000	0.962865
Petal.Width	0.900027	0.817941	-0.366126	0.962865	1.000000

# 3.计算某两列的相关性
print(data["Sepal.Length"].corr(data["Petal.Length"]))

# 4.得到的结果为
0.8717537758865831

3. 数据合并和规整

3.1 数据排序

3.1.1 按索引降序排列,并输出其前5行数据

# 1.导入数据
data = pd.read_csv(r"C:/XXX/xxx/Documents/mycrawlers/数据分析与可视化/实验二——Pandas的基本使用方法/iris.csv")

# 2.按索引降序排序,并输出其前5行数据
data.sort_index(ascending=False).head(5) 

# 3.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
149	150	5.9	3.0	5.1	1.8	virginica
148	149	6.2	3.4	5.4	2.3	virginica
147	148	6.5	3.0	5.2	2.0	virginica
146	147	6.3	2.5	5.0	1.9	virginica
145	146	6.7	3.0	5.2	2.3	virginica

 3.1.2 按sepal_width列降序排序

# 1.按sepal_width列降序排序
data.sort_values("Sepal.Width", ascending=False).head(5)

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
15	16	5.7	4.4	1.5	0.4	setosa
33	34	5.5	4.2	1.4	0.2	setosa
32	33	5.2	4.1	1.5	0.1	setosa
14	15	5.8	4.0	1.2	0.2	setosa
16	17	5.4	3.9	1.3	0.4	setosa

3.1.3Sample函数—— 随机重排(随机抽样)

有时候我们只需要数据集中的一部分,并不需要全部的数据。这个时候我们就要对数据集进行随机的抽样。pandas中自带有抽样的方法。

  • dataframe.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n要抽取的行数 df.sample(n=3,random_state=1),提取3行数据列表注意,使random_state,以确保可重复性的例子。
frac抽取行的比例 例如frac=0.8,就是抽取其中80%。df.sample(frac=0.8, replace=True, random_state=1)
replace是否为有放回抽样,True:有放回抽样,False:未放回抽样 True:取行数据后,可以重复放回后再取,False:取行数据后不放回,下次取其它行数据 注意:当N>总数据容量,replace设置为值时有效
weights字符索引或概率数组 axis=0:为行字符索引或概率数组,axis=1:为列字符索引或概率数组
random_stateint: 随机数发生器种子 random_state=None,取得数据不重复或numpy.random.RandomState,random_state=1,可以取得重复数据
axis选择抽取数据的行还是列,也就是说axis=1时,在列中随机抽取n列,在axis=0时,在行中随机抽取n行。axis=0:抽取行,axis=1:抽取列
# 1.随机重排
data.sample(len(data)).head(5)

# 2.得到的结果为
Unnamed: 0	Sepal.Length	Sepal.Width	Petal.Length	Petal.Width	Species
146	147	6.3	2.5	5.0	1.9	virginica
64	65	5.6	2.9	3.6	1.3	versicolor
70	71	5.9	3.2	4.8	1.8	versicolor
76	77	6.8	2.8	4.8	1.4	versicolor
50	51	7.0	3.2	4.7	1.4	versicolor

4.Groupby函数——数据分组与聚合

  • df.groupby(by=None, axis=0, level=None, as_index=False, sort=True, group_keys=True, squeeze=False, observed=False)
by指定要进行分组的列名,可以是一个列名或者多个列名的列表
axis用于指定分组方向,0表示行方向,1表示列方向
level用于指定分组级别
as_index用于指定分组后的结果是否作为DataFrame的索引
sort用于指定分组结果是否按照分组列进行排序
group_keys用于指定分组后是否保留分组键
squeeze用于指定是否移除单元素的分组
observed用于指定是否观察数据的层次结构
  • 先导入数据
# 1.导入数据
tips = pd.read_csv(r"C:/XXX/xxx/Documents/mycrawlers/数据分析与可视化/实验二——Pandas的基本使用方法/tips1.csv")

# 2.读取其前3行数据
tips.head(3)  

# 3.得到的结果为
total_bill	tip	sex	smoker	day	time	size
0	16.99	1.01	Female	No	Sun	Dinner	2
1	10.34	1.66	Male	No	Sun	Dinner	3
2	21.01	3.50	Male	No	Sun	Dinner	3

4.1 按照性别分组

# 1.按照性别进行分组
grouped = tips.groupby("sex")["tip"]

# 2.分组后求其算术平均值
grouped.mean() 

# 3.得到的结果为
sex
Female    2.833448
Male      3.089618
Name: tip, dtype: float64

4.2 同时按照性别和时间分组

# 1.同时按照性别和时间进行分组
grouped = tips.groupby(["sex","time"])["tip"]

# 2.unstack() 这是一个根据索引行列转换的函数
grouped.mean().unstack()  

# 3.得到的结果为
time	Dinner	Lunch
sex		
Female	3.002115	2.582857
Male	3.144839	2.882121

4.3 同时计算多个聚合函数

# 1.同时计算多个聚合函数
grouped = tips.groupby("sex")["tip"]

# 2.求其算术平均值、最大值和最小值
grouped.agg([np.mean,np.max,np.min]) 

# 3.得到的结果为
	mean	amax	amin
sex			
Female	2.833448	6.5	1.0
Male	3.089618	10.0	1.0

注意:本文中数据以及内容若有侵权,请第一时间联系删除。

           本文是作者个人学习后的总结,未经作者授权,禁止转载,谢谢配合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry晴

创作不易,多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值