Python数据分析练习(三) 数据预处理

1. 有一列整数列A的DatraFrame,删除数值重复的行。

import numpy as np
import pandas as pd
df=pd.DataFrame([1,2,2,3,4,5,5,5,6,7,7],columns=['A'])
print(df)

df.drop_duplicates()
    A
0   1
1   2
2   2
3   3
4   4
5   5
6   5
7   5
8   6
9   7
10  7

A
01
12
33
44
55
86
97

2. 现有如下图所示的表格数据,请对该数据进行以下操作。

In [86]:

import numpy as np
import pandas as pd
from numpy import NaN
df=pd.DataFrame({'A':[1,4,5,NaN],
                'B':[3,5,8,5.2],
                'C':[2,7,NaN,9],
                'D':[NaN,2,None,8.4]})
df

Out[86]:

ABCD
01.03.02.0NaN
14.05.07.02.0
25.08.0NaNNaN
3NaN5.29.08.4

In [87]:

#(1)删除表格中的空值和缺失值。
df.dropna()

Out[87]:

ABCD
14.05.07.02.0

In [88]:

#(2)	将A列缺失的数据使用数字7.5填充,C列缺失的数据使用数字11填充。
df.fillna({'A':7.5,'C':11})

Out[88]:

ABCD
01.03.02.0NaN
14.05.07.02.0
25.08.011.0NaN
37.55.29.08.4

In [90]:

#(3)	将B列中的数据强制转换成int类型。
#强制转换成int 型
df['B'].astype(dtype='int')
#df.dtypes
#B列中有非数字类型的字符NaN,无法将其转换成int类型,若强制转换会出现ValueError异常

Out[90]:

0    3
1    5
2    8
3    5
Name: B, dtype: int32

In [91]:

#(4)	重命名列索引的名称为a,b,c,d, 并且在原有数据上进行修改。
df.rename(columns={'A':'a','B':'b','C':'c','D':'d'},inplace=True)
df

Out[91]:

abcd
01.03.02.0NaN
14.05.07.02.0
25.08.0NaNNaN
3NaN5.29.08.4

3. 现有如下图所示的表格数据,使用后向填充的方式填充缺失的数据。

In [25]:

import numpy as np
import pandas as pd
from numpy import NaN
df=pd.DataFrame({'A':[1,2,3,NaN],
                'B':[NaN,4,NaN,6],
                'C':['a',7,8,9],
                'D':[NaN,2,3,NaN]})
df

Out[25]:

ABCD
01.0NaNaNaN
12.04.072.0
23.0NaN83.0
3NaN6.09NaN

In [26]:

df.fillna(method='bfill')

Out[26]:

ABCD
01.04.0a2.0
12.04.072.0
23.06.083.0
3NaN6.09NaN

4. 现有如下图所示的表格数据,从前向后查找和判断是否有重复的数据并将重复值删除。

In [28]:

import pandas as pd
person_info = pd.DataFrame({'id':[1,2,3,4,5,4],
                            'name':['小铭','小月','彭岩','刘华','周华','刘华'],
                            'age':[18,18,29,58,36,58],
                            'height':[180, 180, 185,175,178,175],
                            'gender':['女','女','男','男','男','男']})
print(person_info)
person_info.duplicated()#从前向后查找和判断是否有重复值
   id name  age  height gender
0   1   小铭   18     180      女
1   2   小月   18     180      女
2   3   彭岩   29     185      男
3   4   刘华   58     175      男
4   5   周华   36     178      男
5   4   刘华   58     175      男

Out[28]:

0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool

In [29]:

#删除重复值
person_info.drop_duplicates()

Out[29]:

idnameageheightgender
01小铭18180
12小月18180
23彭岩29185
34刘华58175
45周华36178

5. 现有如下图所示的表格数据,横向堆叠合并df1和df2,采用外连接的方式。

In [34]:

import pandas as pd
df1=pd.DataFrame({'A':['A0','A0','A1'],'B':['B0','B0','B1']})
df2=pd.DataFrame({'C':['C0','C0','C1','C3'],'D':['D0','D2','D2','D3']})
#横向堆叠合并df1和df2,采用外连接的方式
print(df1)

print(df2)

pd.concat([df1,df2],join='outer',axis=1)
    A   B
0  A0  B0
1  A0  B0
2  A1  B1
    C   D
0  C0  D0
1  C0  D2
2  C1  D2
3  C3  D3

Out[34]:

ABCD
0A0B0C0D0
1A0B0C0D2
2A1B1C1D2
3NaNNaNC3D3

6. 现有如下图所示的两组数据,其中A组中B列数据存在缺失值,并且该列数据为int类型,B组中的数据均为str类型。

In [15]:

#(1)	使用DataFrame创建这两组数据。
import pandas as pd
import numpy as np
group_a = pd.DataFrame({'A': [2,3,5,2,3],
                        'B': ['5',np.nan,'2','3','6'],
                        'C': [8,7,50,8,2],
                        'key': [3,4,5,2,5]})
group_b = pd.DataFrame({'A': [3,4,5],
                        'B': [3,4,5],
                        'C': [3,4,5]})
print(group_a)

print(group_b)
   A    B   C  key
0  2    5   8    3
1  3  NaN   7    4
2  5    2  50    5
3  2    3   8    2
4  3    6   2    5
   A  B  C
0  3  3  3
1  4  4  4
2  5  5  5

In [16]:

#(2)	使用B组中的数据对A组中的缺失值进行填充,并保持数据类型一致。
group_a  = group_a.combine_first(group_b)
group_a

Out[16]:

ABCkey
02583
13474
252505
32382
43625

In [41]:

#(3)	将合并后A组中索引名为key的索引重命名为D。
group_a.rename(columns={'key':'D'})

Out[41]:

ABCD
02583
134.074
252505
32382
43625

7. 有如下一组数据:example_data= [1222, 87, 77, 92, 68, 80, 78, 84, 77, 81, 80, 80, 77, 92, 86, 76, 80, 81, 75, 77, 72, 81, 72, 84, 86, 80, 68, 77, 87, 76, 77, 78, 92, 75, 80, 78, 123, 3, 1223, 1232]

In [45]:

#自定义一个基于的函数,用于检测一组数据中是否含有异常值
import numpy as np
#ser1表示传入DataFrame的某一列
def three_sigma(ser1):
    #求平均值
    mean_value=ser1.mean()
    #求标准差
    std_value=ser1.std()
    #位于(μ-30,μ+30)区间的数据是正常的,不在这个区间的数据为异常的
    #ser1中的数值小于1-30或大于μ+30均为异常值
    # 一旦发现有异常值,就标注为True,否则标注为False
    rule=(mean_value-3*std_value>ser1)|(ser1.mean()+3*ser1.std()<ser1)
    #返回异常值的位置索引
    index=np.arange(ser1.shape[0])[rule]
    #获取异常数据
    outrange=ser1.iloc[index]
    return outrange

In [46]:

# 创建数据
import pandas as pd
example_data = [1222, 87, 77, 92, 68, 80, 78, 84, 77, 81, 80, 80,
                77, 92, 86, 76, 80, 81, 75, 77, 72, 81, 72, 84, 86,
                80,68, 77, 87, 76, 77, 78, 92, 75, 80, 78, 123, 3, 1223, 1232]
df=pd.DataFrame(example_data,columns=['A'])
df

Out[46]:

A
01222
187
277
392
468
580
678
784
877
981
1080
1180
1277
1392
1486
1576
1680
1781
1875
1977
2072
2181
2272
2384
2486
2580
2668
2777
2887
2976
3077
3178
3292
3375
3480
3578
36123
373
381223
391232

In [47]:

#(1)基于3σ原则,检测数据example_data中是否存在异常值。
three_sigma(df['A'])               

Out[47]:

0     1222
38    1223
39    1232
Name: A, dtype: int64

In [74]:

#(2)	利用箱型图检测数据example_data中是否存在异常值。
df.boxplot(column=['A'])

Out[74]:

<AxesSubplot:>

8. 有如下两个表格数据表1和表2,请通过合并重叠数据的方式填充缺失数据得到表3。

In [32]:

c=[0,1,2]
i=[[3.9,3,5],[np.nan,4.6,np.nan],[np.nan,7,np.nan]]
a=pd.DataFrame(i,columns=c)
a

Out[32]:

012
03.93.05.0
1NaN4.6NaN
2NaN7.0NaN

In [35]:

c=[1,2]
i=[[42,np.nan,8.2],[10,7,4]]
b=pd.DataFrame(i,index=c)
b

Out[35]:

012
142NaN8.2
2107.04.0

In [37]:

a.combine_first(b)#合并重叠数据,用b的数据填充a缺失的部分

Out[37]:

012
03.93.05.0
142.04.68.2
210.07.04.0

9. 读取missing_data.xls表中的数据,判断是否存在缺失值,如存在,采用前向填充的方式处理缺失值。

In [101]:

import numpy as np
import pandas as pd
file_data=pd.read_excel(r'F:\实训\数据分析实训\项目三 数据预处理练习\missing_data.xls')
file_data

Out[101]:

235.8333324.0343478.3231
0236.2708325.6379515.4564
1238.0521328.0897517.0909
2235.9063NaN514.8900
3236.7604268.8324NaN
4NaN404.0480486.0912
5237.4167391.2652516.2330
6238.6563380.8241NaN
7237.6042388.0230435.3508
8238.0313206.4349487.6750
9235.0729NaNNaN
10235.5313400.0787660.2347
11NaN411.2069621.2346
12234.4688395.2343611.3408
13235.5000344.8221643.0863
14235.6354385.6432642.3482
15234.5521401.6234NaN
16236.0000409.6489602.9347
17235.2396416.8795589.3457
18235.4896NaN556.3452
19236.9688NaN538.3470

In [102]:

#判断是否存在缺失值
file_data.isnull()

Out[102]:

235.8333324.0343478.3231
0FalseFalseFalse
1FalseFalseFalse
2FalseTrueFalse
3FalseFalseTrue
4TrueFalseFalse
5FalseFalseFalse
6FalseFalseTrue
7FalseFalseFalse
8FalseFalseFalse
9FalseTrueTrue
10FalseFalseFalse
11TrueFalseFalse
12FalseFalseFalse
13FalseFalseFalse
14FalseFalseFalse
15FalseFalseTrue
16FalseFalseFalse
17FalseFalseFalse
18FalseTrueFalse
19FalseTrueFalse

In [104]:

file_data.fillna(method='ffill')#前向填充ffill处理缺失值

Out[104]:

235.8333324.0343478.3231
0236.2708325.6379515.4564
1238.0521328.0897517.0909
2235.9063328.0897514.8900
3236.7604268.8324514.8900
4236.7604404.0480486.0912
5237.4167391.2652516.2330
6238.6563380.8241516.2330
7237.6042388.0230435.3508
8238.0313206.4349487.6750
9235.0729206.4349487.6750
10235.5313400.0787660.2347
11235.5313411.2069621.2346
12234.4688395.2343611.3408
13235.5000344.8221643.0863
14235.6354385.6432642.3482
15234.5521401.6234642.3482
16236.0000409.6489602.9347
17235.2396416.8795589.3457
18235.4896416.8795556.3452
19236.9688416.8795538.3470

10. 读取ele_loss.csv和alarm.csv表数据,查看两个表的形状,以ID和data两个键作为主键进行内连接,查看合并后的数据。

In [112]:

import numpy as np
import pandas as pd

file1=open(r'F:\实训\数据分析实训\项目三 数据预处理练习\ele_loss.csv')
file1_data=pd.read_csv(file1)
file1_data

Out[112]:

IDdateeleloss
0212610012010/9/11091.50.169615
1212610012010/9/21079.50.145556
2212610012010/9/3858.00.151048
3212610012010/9/6883.50.162778
4212610012010/9/71027.50.133186
5212610012010/9/8997.00.159571
6212610012010/9/91022.00.184799
7212610012010/9/10991.00.153268
8212610012010/9/13788.50.154878
9212610012010/9/14792.50.154881
10212610012010/9/15923.50.156584
11212610012010/9/16915.50.162028
12212610012010/9/17961.00.166650
13212610012010/9/201160.50.156170
14212610012010/9/21921.00.160503
15212610012010/9/27957.50.180380
16212610012010/9/281048.00.180077
17212610012010/9/29889.00.164753
18212610012010/9/30668.00.165815
19212610012010/10/8562.00.172527
20212610012010/10/11545.00.177149
21212610012010/10/12685.00.175806
22212610012010/10/13762.00.170726
23212610012010/10/14837.50.208254
24212610012010/10/15635.50.180619
25212610012010/10/18693.50.207981
26212610012010/10/19660.00.188989
27212610012010/10/20540.50.184330
28212610012010/10/21445.00.180350
29212610012010/10/22416.00.179278
30212610012010/10/25507.00.186143
31212610012010/10/26416.50.181382
32212610012010/10/27414.50.211829
33212610012010/10/28363.00.244156
34212610012010/10/29353.50.226345
35212610012010/11/1363.00.221923
36212610012010/11/3400.50.231142
37212610012010/11/4368.50.243218
38212610012010/11/5364.00.269537
39212610012010/11/8378.00.194556
40212610012010/11/9390.50.229689
41212610012010/11/10400.00.220326
42212610012010/11/11351.00.219265
43212610012010/11/12336.00.248774
44212610012010/11/15401.00.199438
45212610012010/11/16445.00.206474
46212610012010/11/17447.00.203799
47212610012010/11/18422.50.238839
48212610012010/11/19438.50.205163

In [113]:

file2=open(r'F:\实训\数据分析实训\项目三 数据预处理练习\alarm.csv')
file2_data=pd.read_csv(file2)
file2_data

Out[113]:

IDdatealarm
0212610012012/10/11电压断相
1212610012012/10/10A相电流过负荷
2212610012010/9/3电流不平衡
3212610012010/9/6C相电流过负荷
4212610012010/5/13电流不平衡
5212610012010/5/12电压缺相
6212610012010/2/15电流不平衡
7212610012010/9/16C相电流过负荷
8212610012010/9/17A相电流过负荷
9212610012011/9/15C相电流过负荷
10212610012010/8/11电压断相
11212610012010/9/16C相电流过负荷
12212610012010/9/17电流不平衡
13212610012010/7/20电压断相
14184030012010/7/21C相电流过负荷
15184030012010/7/22电压缺相
16184030012010/7/25C相电流过负荷
17218800012010/11/4电流不平衡
18218800012010/11/1A相电流过负荷
19218800012011/1/9C相电流过负荷
20163450012010/7/15电压缺相
21169400012010/10/24电流不平衡
22164290012010/2/28电压断相
23164290012010/3/1A相电流过负荷
24170590012011/12/15电流不平衡

In [114]:

pd.merge(file1_data,file2_data,on=['ID','date'])

Out[114]:

IDdateelelossalarm
0212610012010/9/3858.00.151048电流不平衡
1212610012010/9/6883.50.162778C相电流过负荷
2212610012010/9/16915.50.162028C相电流过负荷
3212610012010/9/16915.50.162028C相电流过负荷
4212610012010/9/17961.00.166650A相电流过负荷
5212610012010/9/17961.00.166650电流不平衡

11. 删除数据——探索Iris纸鸢花数据

In [4]:

#导入必要的库
import pandas as pd
import numpy as np
#从目标地址导入数据集
file11='F:\实训\数据分析实训\项目三 数据预处理练习\iris.data'

Out[4]:

'F:\\实训\\数据分析实训\\项目三 数据预处理练习\\iris.data'

In [3]:

#(1)	将数据集存成变量iris
iris = pd.read_csv(file11)
iris.head()

Out[3]:

5.13.51.40.2Iris-setosa
04.93.01.40.2Iris-setosa
14.73.21.30.2Iris-setosa
24.63.11.50.2Iris-setosa
35.03.61.40.2Iris-setosa
45.43.91.70.4Iris-setosa

In [5]:

#(2)	创建数据框的列名称['sepal_length','sepal_width', 'petal_length', 'petal_width', 'class']
iris = pd.read_csv(file11,names = ['sepal_length','sepal_width','petal_length','petal_width','class'])
iris.head()

Out[5]:

sepal_lengthsepal_widthpetal_lengthpetal_widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa

In [6]:

#(3)	数据框中有缺失值吗?
pd.isnull(iris).sum()

Out[6]:

sepal_length    0
sepal_width     0
petal_length    0
petal_width     0
class           0
dtype: int64

In [7]:

#(4)	将列petal_length的第10到19行设置为缺失值
iris.iloc[10:20,2:3] = np.nan
iris.head(20)

Out[7]:

sepal_lengthsepal_widthpetal_lengthpetal_widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
55.43.91.70.4Iris-setosa
64.63.41.40.3Iris-setosa
75.03.41.50.2Iris-setosa
84.42.91.40.2Iris-setosa
94.93.11.50.1Iris-setosa
105.43.7NaN0.2Iris-setosa
114.83.4NaN0.2Iris-setosa
124.83.0NaN0.1Iris-setosa
134.33.0NaN0.1Iris-setosa
145.84.0NaN0.2Iris-setosa
155.74.4NaN0.4Iris-setosa
165.43.9NaN0.4Iris-setosa
175.13.5NaN0.3Iris-setosa
185.73.8NaN0.3Iris-setosa
195.13.8NaN0.3Iris-setosa

In [8]:

#(5)	将petal_lengt缺失值全部替换为1.0
iris.petal_length.fillna(1,inplace = True)
iris

Out[8]:

sepal_lengthsepal_widthpetal_lengthpetal_widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica

150 rows × 5 columns

In [9]:

#(6)	删除列class
del iris['class']
iris.head()

Out[9]:

sepal_lengthsepal_widthpetal_lengthpetal_width
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2

In [10]:

#(7)	将数据框前三行设置为缺失值
iris.iloc[0:3,:] = np.nan
iris.head()

Out[10]:

sepal_lengthsepal_widthpetal_lengthpetal_width
0NaNNaNNaNNaN
1NaNNaNNaNNaN
2NaNNaNNaNNaN
34.63.11.50.2
45.03.61.40.2

In [11]:

#(8)	删除有缺失值的行
iris = iris.dropna(how = 'any')
iris.head()

Out[11]:

sepal_lengthsepal_widthpetal_lengthpetal_width
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2

In [12]:

#(9)	重新设置索引
iris = iris.reset_index(drop = True)
iris.head()

Out[12]:

sepal_lengthsepal_widthpetal_lengthpetal_width
04.63.11.50.2
15.03.61.40.2
25.43.91.70.4
34.63.41.40.3
45.03.41.50.2

12.泰坦尼克数据预处理

In [36]:

#(1)	读取数据
file12=open(r'F:\实训\数据分析实训\项目三 数据预处理练习\titanic_train.csv')
tk=pd.read_csv(file12)
tk

# passengerId:旅客 id;survived:0 代表遇难,1 代表存活;pclass:舱位,1-3 分别代表一二三等舱;
# name:旅客姓名;sex:旅客性别;age:年龄;
# sibsp:船上的同代亲属人数,如兄弟姐妹;parch:船上的非同代亲属人数,如父母子女;
# ticket:船票编号;fare:船票价格;cabin:客舱号;embarked:登船港口

Out[36]:

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 12 columns

In [59]:

#(2)	统计age列缺失值的个数
tk.Age.isnull().sum()
print(tk.Age.isnull().sum())
177

In [60]:

#(3)	去掉Age和Sex这两列带有缺失值的行
tk.dropna(axis=0,subset=['Age','Sex'])

Out[60]:

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

714 rows × 12 columns

In [132]:

#(4)	根据“Age”的大小逆序排列
tk.sort_values(by='Age',ascending=False)

Out[132]:

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
63063111Barkworth, Mr. Algernon Henry Wilsonmale80.0002704230.0000A23S
85185203Svensson, Mr. Johanmale74.0003470607.7750NaNS
49349401Artagaveytia, Mr. Ramonmale71.000PC 1760949.5042NaNC
969701Goldschmidt, Mr. George Bmale71.000PC 1775434.6542A5C
11611703Connors, Mr. Patrickmale70.5003703697.7500NaNQ
.......................................
85986003Razi, Mr. RaihedmaleNaN0026297.2292NaNC
86386403Sage, Miss. Dorothy Edith "Dolly"femaleNaN82CA. 234369.5500NaNS
86886903van Melkebeke, Mr. PhilemonmaleNaN003457779.5000NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS

891 rows × 12 columns

In [61]:

#(5)	求船员年龄的平均数(排除缺失值)
tk['Age'].mean()

Out[61]:

29.69911764705882

In [66]:

#(6)	计算每类船舱对应的平均票价(pivot_table)
#tk.groupby('Pclass')['Fare'].mean() 

#三个参数:index:表示接下来要统计的信息是以谁为基准的,index就=谁(每个船舱等级对应的平均票价,所以index = Pclass船舱等级)
#        values:表示用统计Pclass与谁之间的关系,values就=谁(Pclass与票价之间的关系,values = Fare)
#        aggfunc:表示Pclass与Fare之间的什么关系,求的是船舱等级与票价的平均值之间的关系,所以aggfunc=np.mean()

tk_pj= tk.pivot_table(index = "Pclass",
                        values = "Fare",
                        aggfunc = np.mean)
tk_pj

Out[66]:

Fare
Pclass
184.154687
220.662183
313.675550

In [67]:

#(7)	求每类船舱对应的平均存活率(pivot_table)
#三个参数:index:表示接下来要统计的信息是以谁为基准的,index就=谁(每个船舱等级对应的平均存活率,所以index = Pclass船舱等级)
#        values:表示用统计Pclass与谁之间的关系,values就=谁(Pclass与存活率之间的关系,values = Survived)
#        aggfunc:表示Pclass与Survived之间的什么关系,求的是船舱等级的平均存活率的关系,所以aggfunc=np.mean()

tk_chl= tk.pivot_table(index = "Pclass",
                        values = "Survived",
                        aggfunc = np.mean)
tk_chl

Out[67]:

Survived
Pclass
10.629630
20.472826
30.242363

In [68]:

#(8)	求不同船舱等级乘客的平均年龄(pivot_table)
tk_nl= tk.pivot_table(index = "Pclass",
                        values = "Age",
                        aggfunc = np.mean)
tk_nl

Out[68]:

Age
Pclass
138.233441
229.877630
325.140620

In [69]:

#(9)	计算不同的登船地点(C,Q,S)对应的总票价和总获救人数。(pivot_table)
#用.pivot_table()的话,对于index ,接下来要统计的东西是以登船地点为基准的,所以index = "Embarked"
#对于values,要统计的是不同登船地点与票价和是否获救之间的关系,所以values = ["Fare","Survived" ]
#对于aggfunc,要统计的是不同登船地点的总的票价和总的获救人数,所以aggfunc = np.sum
tk_9= tk.pivot_table(index = "Embarked",
                        values =["Fare","Survived"],
                        aggfunc = np.sum)
tk_9

Out[69]:

FareSurvived
Embarked
C10072.296293
Q1022.254330
S17439.3988217

 

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 数据预处理实例: 假设我们有一个名为“customers.csv”的客户数据集,其中包含客户姓名、年龄、性别、购买历史和信用分数等信息。我们想要对该数据集进行一些预处理,以便用于进一步的分析和建模。 1. 导入必要的库 ```python import pandas as pd import numpy as np ``` 2. 读取数据集 ```python data = pd.read_csv('customers.csv') ``` 3. 检查数据质量 ```python # 查看前5行数据 data.head() # 查看数据维度 data.shape # 检查缺失值 data.isnull().sum() # 检查重复值 data.duplicated().sum() # 查看数据类型 data.dtypes ``` 4. 处理缺失值 ```python # 删除缺失值 data.dropna(inplace=True) # 填充缺失值 data.fillna(value=0, inplace=True) ``` 5. 处理重复值 ```python # 删除重复值 data.drop_duplicates(inplace=True) ``` 6. 处理离群值 ```python # 使用箱线图检测离群值 import seaborn as sns sns.boxplot(x=data['age']) # 删除离群值 Q1 = data['age'].quantile(0.25) Q3 = data['age'].quantile(0.75) IQR = Q3 - Q1 data = data[(data['age'] >= Q1 - 1.5*IQR) & (data['age'] <= Q3 + 1.5*IQR)] ``` 7. 处理数据类型 ```python # 转换数据类型 data['age'] = data['age'].astype('int') data['credit_score'] = data['credit_score'].astype('float') # 对分类变量进行编码 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data['gender'] = le.fit_transform(data['gender']) ``` 8. 特征缩放 ```python # 使用 MinMaxScaler 进行特征缩放 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() data[['age', 'credit_score']] = scaler.fit_transform(data[['age', 'credit_score']]) ``` 以上是一个简单的 Python 数据预处理实例,其中包括数据质量检查、缺失值处理、重复值处理、离群值处理、数据类型处理和特征缩放等常见的预处理步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值