1、替换 df.replace(to_replace,regex,......)
Series或DataFrame可以通过replace方法可以实现元素值的替换操作,但空值无法处理。
to_replace:被替换值,支持单一值,列表,字典,正则表达式。
regex:是否使用正则表达式,默认为False。
df = pd.read_excel(r"D:\Case_data/data01.xlsx",encoding="utf-8")
display("数据:",df)
print("输出行列数:",df.shape)
display("输出统计信息:",df.describe())
print("输出空值信息:","",df.info())
# 替换。支持单个值,字典,列表,正则表达式,替换都是拷贝后的替换,原来的df不变
df["是否已婚"] = df["是否已婚"].replace("否", "0") #单个值的替换
df["是否已婚"] = df["是否已婚"].replace("是", "1") #单个值的替换
df["资产(万)"] = df["资产(万)"].replace({50:52,30:"35"}) # 字典 替换
df["车产1"] = df["车产"].replace([0,1],["否","是"]) # 列表对应替换
df["房产1"] = df["房产"].replace([1,2],"是") # 列表替换为同一个值
df["编号1"] = df["编号"].replace('A(.*)', "a", regex=True) #正则表达式替换
display(df)
2、索引替换
df["房产1"][df["房产1"].astype("str") == "0"]="否"
df["资产(万)"][df["资产(万)"].astype("int") >= 60]="优秀"
display(df)
3、映射替换
map:对当前Series的值进行映射转换。参数可以是一个Series, 根据Series的index来进行映射,一个字典或者是一个函数。
apply:通过函数实现映射转换。【Series传递元素,DataFrame传递行或列。】
applymap:通过函数实现元素级的映射转换。
# 通过apply或map来实现。
def fx(item):
if item >= 1:
Z = "合格"
else:
Z = "不合格"
return Z
df["Z"] = df["房产"].map(fx)
df["Z1"] = df["房产"].apply(fx)
df["Z2"] = df[["房产"]].applymap(fx)
display(df)
4、空值替换
发现空值
df.shape ; df.info() ; df.describe()
删除空值
df.dropna(axis=0/1,inplace=True/False,how='any' / how='all' / thresh=n)
说明:
axis:指定丢弃行或者丢弃列(默认为丢弃行axis = 0)。axis=0 / axis=1
inplace:指定是否就地修改,默认为False。是否就地操作
how:指定dropna丢弃缺失值的行为,默认为any(只要存在就删除)。all (该行(列)全部为空才删除)/ any
thresh:当非空数值达到该值时,保留数据,否则删除。如 thresh = 3,弥补how的不足(与how不同时使用)
填充缺失值
df.fillna(value / method ='ffill' [,limit=n] / method='bfill' [,limit=n] ,[inplace=True/False])
说明:
value:填充所使用的值。固定值填充,支持直接输入值,支持字典,支持Series,需要注意的是字典的key值,Series的index要与df的列名称对应。
method:指定前值(上一个有效值)填充(pad / ffill),还是后值(下一个有效值)填充(backfill / bfill)。
limit:如果指定method,表示最大连续NaN的填充数量,如果没有指定method,则表示最大的NaN填充数量。
inplace:指定是否就地修改,默认为False。
5、重复值替换
发现重复值
我们可以通过duplicated方法来发现重复值。该方法返回Series类型的对象,值为布尔类型,表示是否与上一行重复。
r = df[df.duplicated( [subset=[0,1,...],keep='first'/'last'/False)] )]
display(r.sort_values([1,0,...], axis=0))
参数说明:
subset:指定依据哪些列判断是否重复,默认为所有列。
keep:指定记录被标记为重复(True)的规则。默认为first。
删除重复值
通过drop_duplicates可以删除重复值。
df.drop_duplicates([subset=[0,1,...], keep='first'/'last', inplace=Ture/False])
参数说明:
subset:指定依据哪些列判断是否重复,默认为所有列,如subset = ["姓名","编码","资产"]。
keep:指定记录删除(或保留)的规则。默认为first,所以一般不要再自行指定keep啦。
inplace:指定是否就地修改,默认为False。
#如果想了解关于当前这个方法的更多参数。怎么办?
df.drop_duplicates
# 按组合键:shift + tab 建 4次
6、元素内容替换
s = pd.Series(["10 1 ",1001,10001])
s = s.astype("str") #先转换为字符串类型
len_s = s.str.len() #计算每个元素的长度
isdigit_s = s.str.isdigit() #查看每个元素是否只包含数字,返回True/False
cut_s = s.str[0:2] #切片截取字符串
split_s = s.str.split(" ") #指定字符进行切割,返回列表
strip_s = s.str.strip(' ') #删除左右两端的空格,中间部分依然保留
replace_s = s.str.replace(" ","") #将指定的字符替换为其他字符,这里将空格替换删除
display(len_s,isdigit_s,cut_s,split_s,strip_s,replace_s)