数据清洗的 2 个小技巧,好用
1 Pandas 巧用 str.split 和 str.cat
因为以上两个方法,直接按列操作,所以省掉一层 for 循环,下面直接看例子。
df = pd.DataFrame({'names':['Geordi La Forge', 'Deanna Troi', 'Jack'],'IDs':[1,2,3]})
df

列分割
对 names 列,按照第一个空格分割为两列:
df['first_name'] = df['names'].str.split(n = 1).str[0]df['last_name'] = df['names'].str.split(n = 1).str[1]df
结果如下:

列合并方法 1
分割列搞定,接下来再合并回去,使用 cat 方法:
df['names_copy'] = df['first_name'].str.cat(df['last_name'], sep = ' ')
df

合并两列得到一个新列 names_copy 搞定!
列合并方法 2
还有别的合并方法吗,直接使用 + 连接字符串:
df['names_copy2'] = df['first_name'] + ' '+ df['last_name']df
效果是一样的:

2 Pandas 多条件筛选可读性较好的写法
有特征上百个,根据多个特征筛选 DataFrame 时,如果这么做,可读性不太友好:

df[(df['continent'] == 'Europe') & (df['beer_servings'] > 150) & (df['wine_servings'] > 50) & (df['spirit_servings'] < 60)]
连续多个筛选条件写到一行里。
更好可读性的写法
cr1 = df['continent'] == 'Europe'cr2 = df['beer_servings'] > 150cr3 = df['wine_servings'] > 50cr4 = df['spirit_servings'] < 60
df[cr1 & cr2 & cr3 & cr4]
个人更喜欢后者,虽然代码多几行,但是可读性更好一些,拆开多个过滤条件并分别赋值给对象,最后再传到 df 中,代码看起来更清爽。
另一种多条件过滤的建议写法,供大家参考选择。码字不易,欢迎点个在看支持下。
赞 (0)
