- 读取文件
import pandas as pd data = pd.read_csv("modified_titanic_data.csv") data.head()
- 删除无用列
data.drop(["Pclass","Unnamed: 13"],inplace=True,axis=1) data.head()
-
类型转换
转换的目的就是为了好分析 把唯一标识转换为字符串 方便匹配 把日期形式的字符串转换为日期形式,方便后续的操作data.info() data["PassengerId"] = data["PassengerId"].astype("str") data["OnboardTime"] = data["OnboardTime"].astype("datetime64")
-
删除重复行
首先判断是否有重复行data[data.duplicated(keep=False)]
然后删除重复行
data.drop_duplicates(keep="first",inplace=True)
最后重置索引列,因为删除之后,只是把对应的列给删除了,索引并没有修改
data.reset_index(drop=True,inplace=True)
-
规范数据格式
data["Sex"].unique() # array(['male', 'female', 'm', 'm ', 'M', 'F', 'f'], dtype=object)
就针对性别这一行 存在很多不规范的现象 需要转换为male或者female。使用map数据映射规范数据。
data["Sex"] = data["Sex"].map({ "male":"male", "m":"male", "M":"male", "m ":"male", "F":"female", "f":"female", "female":"female" })
-
缺失值处理
data["Age"].unique() array(['22', '-', '26', 'na', '35', nan, '54', '2', '14', '4', '58', '20', '39', '55', '31', '34', '15', '28', '8', '38', '19', '40', '66', '42', '21', '18', '27', '3', '7', '49', '29', '65', '28.5', '5', '11', '45', '17', '32', '16', '25', '0.83', '30', '33', '23', '24', '46', '59', '71', '37', '47', '14.5', '70.5', '32.5', '12', '9', '36.5', '51', '55.5', '40.5', '44', '1', '61', '56', '50', '36', '45.5', '20.5', '62', '41', '52', '63', '23.5', '0.92', '43', '60', '10', '64', '13', '48', '0.75', '53', '57', '80', '70', '24.5', '6', '0.67', '30.5', '0.42', '34.5', '74'], dtype=object)
存在一些字符串形式的nan 还有一些不规范的“-”需要进行修改,修改成真正的缺失值。并且把age这一列修改成浮点型,方便后续的操作。
import numpy as np data["Age"]=data["Age"].replace("na",np.NaN).replace("-",np.NaN) data["Age"].astype("float",inplace = True)
-
日期的那一列 只需要年月日,不需要具体到每天的时间。所以说需要提取想对应的年月日。
data["OnboardTime"] =data["OnboardTime"].dt.strftime('%Y-%m-%y') data["OnboardTime"] = data["OnboardTime"].apply(lambda x:str(x)[0:10])
在这里,可以使用以上两种方法,个人推荐第二种方法,调用pandas时间序列的方法,就可以提取相对应的数据。
python pandas 数据清理常用步骤
于 2022-12-30 10:11:50 首次发布