Excel 处理技巧 (二)

数据清洗

1、重复值处理 **

(在多分数据合并出现重复 or 文件中对重复的数据只计算一次可用)

duplicated(self,subset=None,keep='first')

# keep='first'    表示除了第一次出现外,其余相同的数据都标记为重复
# keep='last'    表示除了最后一次出现外,其余相同的数据都标记为重复
# keep=False     表示所有相同的数据都被标记为重复值
# drop_duplicated()    则表示删除重复值

2、缺失值处理 **

(1) df.dropna() 去除数据有空所对应的行
Excel 处理技巧 (二)

测试数据,通过“读取 Excel”组件直接读出,返回如上图:
会发现索引为 2,这行有一个空值,输出时,空值,默认以“Nan”显示

经过一下代码处理后:

df = pd.read_excel(io='//mac/Home/Desktop/test/test.xlsx')
df1 = df.dropna()
print(df1)

得到的结果为:
Excel 处理技巧 (二)

会发现索引为 2 的行,已经不存在了。

(2) df.fillna() 用其他数值替代缺失值

a、df.fillna(method='pad')   用前一个数据值替代Nan
b、df.fillna(method='bfill')   用后一个数据值替代Nan
c、df.fillna(df.mean())   用平均数或者其他描述性统计量来代替Nan
d、df.fillna(df.mean()['填补列名':'计算均值的列名'])   使用选择列的均值进行缺失值的处理
e、df.fillna({'列名1':"值1",'列名2',"值2"})     可以传入一个字典,对不同的列进行填充

同样适用上面的测试数据,对 a 点。
经过以下代码后:

df = pd.read_excel(io='//mac/Home/Desktop/test/test.xlsx')
df1 = df.fillna(method='pad')
print(df1)

得到的如下:
Excel 处理技巧 (二)

会发现,之前索引为 2,这行英语的值取得是索引 1,同列的数据。(剩下属性不做演示)

3、 df.strip()

清除字符串数据左右指定的字符 ** 默认空格(中间不清除)
通过测试数据,我们读取姓名一列,得到下图
Excel 处理技巧 (二)

经过以下代码:

df = pd.read_excel(io='//mac/Home/Desktop/test/test.xlsx')
df1 = df['姓名'].str.strip('J')
print(df1)

得到如下图:
Excel 处理技巧 (二)
代码中,我们将姓名这一列,去除字段中首尾的“J”。(日常流程中,可能去除空字符串要较多一点,一般在多分不同来源的数据汇总的时候会出现这种问题)。

当然,该函数,还有两种写法,分别是:

a、df[列名].str.rstrip(去除的字符)          # 去除尾部
b、df[列名].str.lstrip(去除的字符)          # 去除首部

注意:

此方法只针对字符串格式,若列如测试数据中“学号”一列,使用此代码,会报错 :

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

解决方案,参照下贴 Excel 处理技巧 - 数据处理 (三)