【Python数据处理篇——DataFrame数据清洗】重复值处理、缺失值处理、特定值替换、删除指定条件行
有关DataFrame的数据清洗内容,包括重复值的处理、缺失值处理、特定值替换、删除指定条件行等
欢迎访问我搞事情的【知乎账号】:Coffee
以及我的【B站漫威剪辑账号】:VideosMan
若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦。
关于DataFrame的相关知识,我还进行了汇总,数据清洗是DataFrame其中重要的知识点,欢迎点赞收藏!!
【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
【Python数据处理篇——DataFrame数据清洗】
- 4.3.1 数据清洗
- 1、重复值的处理:drop_duplicates()
- 2、缺失值处理:
- 1. dropna() 去除数据结构中值为空的数据行
- 2. df.fillna() 用其他数值替代NaN,有些时候空数据直接删除会影响分析的结果,可以对数据进行填补。【例4-8】使用数值或者任意字符替代缺失值
- 3. df.fillna(method='pad') 用前一个数据值替代NaN
- 4. df.fillna(method='bfill') 用后一个数据值替代NaN
- 5. df.fillna(df.mean()) 用平均数或者其他描述性统计量来代替NaN。
- 6. df.fillna(df.mean()[math: physical]) 可以选择列进行缺失值的处理
- 7. strip():清除字符型数据左右(首尾)指定的字符,默认为空格,中间的不清除。
- 3、特定值替换:replace('缺考', 0)
- 4、删除满足条件元素所在的行:drop()
4.3.1 数据清洗
1、重复值的处理:drop_duplicates()
drop_duplicates()
把数据结构中行相同的数据去除(保留其中的一行)
【例4-6】数据去重。
这里df是原始数据,其中7、9行、8、10行是重复行from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') df
Out[1]:
YHM TCSJ YWXT IP
0 S1402048 18922254812 1.225790e+17 221.205.98.55
1 S1411023 13522255003 1.225790e+17 183.184.226.205
2 S1402048 13422259938 NaN 221.205.98.55
3 20031509 18822256753 NaN 222.31.51.200
4 S1405010 18922253721 1.225790e+17 120.207.64.3
5 20140007 NaN 1.225790e+17 222.31.51.200
6 S1404095 13822254373 1.225790e+17 222.31.59.220
7 S1402048 13322252452 1.225790e+17 221.205.98.55
8 S1405011 18922257681 1.225790e+17 183.184.230.38
9 S1402048 13322252452 1.225790e+17 221.205.98.55
10 S1405011 18922257681 1.225790e+17 183.184.230.38
newDF=df.drop_duplicates() newDF
Out[2]:
YHM TCSJ YWXT IP
0 S1402048 18922254812 1.225790e+17 221.205.98.55
1 S1411023 13522255003 1.225790e+17 183.184.226.205
2 S1402048 13422259938 NaN 221.205.98.55
3 20031509 18822256753 NaN 222.31.51.200
4 S1405010 18922253721 1.225790e+17 120.207.64.3
5 20140007 NaN 1.225790e+17 222.31.51.200
6 S1404095 13822254373 1.225790e+17 222.31.59.220
7 S1402048 13322252452 1.225790e+17 221.205.98.55
8 S1405011 18922257681 1.225790e+17 183.184.230.38
上面的df中第7和第9行数据相同,第8和第10行数据相同,去重后第7、9和8、10各保留一行数据。
2、缺失值处理:
dropna()、df.fillna() 、df.fillna(method=‘pad’)、df.fillna(method=‘bfill’)、df.fillna(df.mean())、df.fillna(df.mean()[math: physical]) 、strip()
对于缺失数据的处理方式有数据补齐、删除对应行、不处理等方法。
【例4-6】缺失处理。
这里df是原始数据,其中2、3、5行有缺失值from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') df
Out[1]:
YHM TCSJ YWXT IP
0 S1402048 18922254812 1.225790e+17 221.205.98.55
1 S1411023 13522255003 1.225790e+17 183.184.226.205
2 S1402048 13422259938 NaN 221.205.98.55
3 20031509 18822256753 NaN 222.31.51.200
4 S1405010 18922253721 1.225790e+17 120.207.64.3
5 20140007 NaN 1.225790e+17 222.31.51.200
6 S1404095 13822254373 1.225790e+17 222.31.59.220
7 S1402048 13322252452 1.225790e+17 221.205.98.55
8 S1405011 18922257681 1.225790e+17 183.184.230.38
9 S1402048 13322252452 1.225790e+17 221.205.98.55
10 S1405011 18922257681 1.225790e+17 183.184.230.38
1. dropna() 去除数据结构中值为空的数据行
【例4-7】删除数据为空所对应的行
from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') newDF=df.dropna() newDF
Out[3]:
YHM TCSJ YWXT IP
0 S1402048 18922254812 1.225790e+17 221.205.98.55
1 S1411023 13522255003 1.225790e+17 183.184.226.205
4 S1405010 18922253721 1.225790e+17 120.207.64.3
6 S1404095 13822254373 1.225790e+17 222.31.59.220
7 S1402048 13322252452 1.225790e+17 221.205.98.55
8 S1405011 18922257681 1.225790e+17 183.184.230.38
9 S1402048 13322252452 1.225790e+17 221.205.98.55
10 S1405011 18922257681 1.225790e+17 183.184.230.38
例中的2、3、5行有空值NaN已经被删除。
2. df.fillna() 用其他数值替代NaN,有些时候空数据直接删除会影响分析的结果,可以对数据进行填补。【例4-8】使用数值或者任意字符替代缺失值
【例4-8】使用数值或者任意字符替代缺失值
from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') df.fillna('?')
Out[4]:
YHM TCSJ YWXT IP DLSJ
0 S1402048 1.89223e+10 1.22579e+17 221.205.98.55 2014-11-04 08:44:46
1 S1411023 1.35223e+10 1.22579e+17 183.184.226.205 2014-11-04 08:45:06
2 S1402048 1.34223e+10 ? 221.205.98.55 2014-11-04 08:46:39
3 20031509 1.88223e+10 ? 222.31.51.200 2014-11-04 08:47:41
4 S1405010 1.89223e+10 1.22579e+17 120.207.64.3 2014-11-04 08:49:03
5 20140007 ? 1.22579e+17 222.31.51.200 2014-11-04 08:50:06
6 S1404095 1.38223e+10 1.22579e+17 222.31.59.220 2014-11-04 08:50:02
7 S1402048 1.33223e+10 1.22579e+17 221.205.98.55 2014-11-04 08:49:18
8 S1405011 1.89223e+10 1.22579e+17 183.184.230.38 2014-11-04 08:14:55
9 S1402048 1.33223e+10 1.22579e+17 221.205.98.55 2014-11-04 08:49:18
10 S1405011 1.89223e+10 1.22579e+17 183.184.230.38 2014-11-04 08:14:55
如2、3、5行有空,用?替代了缺失值。
3. df.fillna(method=‘pad’) 用前一个数据值替代NaN
【例4-9】用前一个数据值替代缺失值
(2、3、5行是缺失值)from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') df.fillna(method='pad')
Out[5]:
YHM TCSJ YWXT IP DLSJ
0 S1402048 18922254812 1.225790e+17 221.205.98.55 2014-11-04 08:44:46
1 S1411023 13522255003 1.225790e+17 183.184.226.205 2014-11-04 08:45:06
2 S1402048 13422259938 1.225790e+17 221.205.98.55 2014-11-04 08:46:39
3 20031509 18822256753 1.225790e+17 222.31.51.200 2014-11-04 08:47:41
4 S1405010 18922253721 1.225790e+17 120.207.64.3 2014-11-04 08:49:03
5 20140007 18922253721 1.225790e+17 222.31.51.200 2014-11-04 08:50:06
6 S1404095 13822254373 1.225790e+17 222.31.59.220 2014-11-04 08:50:02
7 S1402048 13322252452 1.225790e+17 221.205.98.55 2014-11-04 08:49:18
8 S1405011 18922257681 1.225790e+17 183.184.230.38 2014-11-04 08:14:55
9 S1402048 13322252452 1.225790e+17 221.205.98.55 2014-11-04 08:49:18
10 S1405011 18922257681 1.225790e+17 183.184.230.38 2014-11-04 08:14:55
4. df.fillna(method=‘bfill’) 用后一个数据值替代NaN
【例4-10】用后一个数据值替代NaN
(2、3、5行是缺失值)from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') df.fillna(method='bfill')
Out[6]:
YHM TCSJ YWXT IP DLSJ
0 S1402048 18922254812 1.225790e+17 221.205.98.55 2014-11-04 08:44:46
1 S1411023 13522255003 1.225790e+17 183.184.226.205 2014-11-04 08:45:06
2 S1402048 13422259938 1.225790e+17 221.205.98.55 2014-11-04 08:46:39
3 20031509 18822256753 1.225790e+17 222.31.51.200 2014-11-04 08:47:41
4 S1405010 18922253721 1.225790e+17 120.207.64.3 2014-11-04 08:49:03
5 20140007 13822254373 1.225790e+17 222.31.51.200 2014-11-04 08:50:06
6 S1404095 13822254373 1.225790e+17 222.31.59.220 2014-11-04 08:50:02
7 S1402048 13322252452 1.225790e+17 221.205.98.55 2014-11-04 08:49:18
8 S1405011 18922257681 1.225790e+17 183.184.230.38 2014-11-04 08:14:55
9 S1402048 13322252452 1.225790e+17 221.205.98.55 2014-11-04 08:49:18
10 S1405011 18922257681 1.225790e+17 183.184.230.38 2014-11-04 08:14:55
5. df.fillna(df.mean()) 用平均数或者其他描述性统计量来代替NaN。
【例4-11】使用均值来填补数据。
from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2_0.xlsx') df df.fillna(df.mean())
Out[7]:
No math physical Chinese
0 1 76 85 78
1 2 85 56 NaN
2 3 76 95 85
3 4 NaN 75 58
4 5 87 52 68Out[8]:
No math physical Chinese
0 1 76 85 78.00
1 2 85 56 72.25
2 3 76 95 85.00
3 4 81 75 58.00
4 5 87 52 68.00
6. df.fillna(df.mean()[math: physical]) 可以选择列进行缺失值的处理
【例4-12】为某列使用该列的均值来填补数据
from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2_0.xlsx') df.fillna(df.mean()['math':'physical'])
Out[26]:
No math physical Chinese
0 1 76.0 85 78.0
1 2 85.0 56 NaN
2 3 76.0 95 85.0
3 4 NaN 75 58.0
4 5 87.0 52 68.0Out[9]:
No math physical Chinese
0 1 76 85 78
1 2 85 56 NaN
2 3 76 95 85
3 4 81 75 58
4 5 87 52 68
7. strip():清除字符型数据左右(首尾)指定的字符,默认为空格,中间的不清除。
【例4-13】删除字符串左右或首位指定的字符。
from pandas import DataFrame from pandas import read_excel df = read_excel('e://rz2.xlsx') newDF=df['IP'].str.strip() #因为IP是一个对象,所以先转为str。 newDF
Out[27]:
YHM TCSJ YWXT IP DLSJ
0 S1402048 18922254812.0 1.2257903137349373e+17 221.205.98.55 2014-11-04 08:44:46
1 S1411023 13522255003.0 1.2257903137349373e+17 183.184.226.205 2014-11-04 08:45:06
2 S1402048 13422259938.0 221.205.98.55 2014-11-04 08:46:39
3 20031509 18822256753.0 222.31.51.200 2014-11-04 08:47:41
4 S1405010 18922253721.0 1.2257903137349373e+17 120.207.64.3 2014-11-04 08:49:03
5 20140007 1.2257903137349373e+17 222.31.51.200 2014-11-04 08:50:06
6 S1404095 13822254373.0 1.2257903137349373e+17 222.31.59.220 2014-11-04 08:50:02
7 S1402048 13322252452.0 1.2257903137349373e+17 221.205.98.55 2014-11-04 08:49:18
8 S1405011 18922257681.0 1.2257903137349373e+17 183.184.230.38 2014-11-04 08:14:55
9 S1402048 13322252452.0 1.2257903137349373e+17 221.205.98.55 2014-11-04 08:49:18
10 S1405011 18922257681.0 1.2257903137349373e+17 183.184.230.38 2014-11-04 08:14:55Out[10]:
0 221.205.98.55
1 183.184.226.205
2 221.205.98.55
3 222.31.51.200
4 120.207.64.3
5 222.31.51.200
6 222.31.59.220
7 221.205.98.55
8 183.184.230.38
9 221.205.98.55
10 183.184.230.38
Name: IP, dtype: object
3、特定值替换:replace(‘缺考’, 0)
df11 = df11.replace(np.nan,'[正常]')
df11 = df11.replace('none',np.nan)
df11 = df11.replace(' ― ',np.nan)
4、删除满足条件元素所在的行:drop()
df = df.drop(df[].index)
#删除价格大于1000的手机
df_s_acc = df_s.drop(df_s[df_s['价格']>=1000].index)
Out[68]:
Unnamed: 0 ID值 价格 … 标签 变更 规范日期
5566 6626 1354676 699 … 安全手机 2020/11/1 2020-11-01
5565 6625 1354673 799 … 安全手机 2020/11/1 2020-11-01
101 102 1346463 2699 … 安全手机 2020/11/11 2020-11-11
64 64 1338710 3199 … 安全手机 2020/11/11 2020-11-11
2884 3382 1352445 1499 … 安全手机 2020/11/26 2020-11-26
2892 3391 1349515 1099 … 安全手机 2020/11/26 2020-11-26
2910 3411 1349516 1299 … 安全手机 2020/11/26 2020-11-26
2844 3340 1348871 999 … 安全手机 2020/11/26 2020-11-26
4046 4845 1350884 799 … 安全手机 2020/12/1 2020-12-01
4036 4834 1350882 699 … 安全手机 2020/12/1 2020-12-01
3394 4023 1349976 799 … 安全手机 2020/12/12 2020-12-12
4740 5656 1353088 2399 … 安全手机 2020/12/22 2020-12-22
4737 5653 1353068 1999 … 安全手机 2020/12/22 2020-12-22
4048 4847 1357947 1099 … 安全手机 2021/1/1 2021-01-01
4038 4836 1357933 999 … 安全手机 2021/1/1 2021-01-01
4043 4842 1357949 1199 … 安全手机 2021/1/1 2021-01-01Out[72]:
Unnamed: 0 ID值 价格 … 标签 变更 规范日期
5566 6626 1354676 699 … 安全手机 2020/11/1 2020-11-01
5565 6625 1354673 799 … 安全手机 2020/11/1 2020-11-01
2844 3340 1348871 999 … 安全手机 2020/11/26 2020-11-26
4046 4845 1350884 799 … 安全手机 2020/12/1 2020-12-01
4036 4834 1350882 699 … 安全手机 2020/12/1 2020-12-01
3394 4023 1349976 799 … 安全手机 2020/12/12 2020-12-12
4038 4836 1357933 999 … 安全手机 2021/1/1 2021-01-01
也可以使用多个条件
df_clear = df.drop(df[df['x']<0.01].index)
# 也可以使用多个条件
df_clear = df.drop(df[(df['x']<0.01) | (df['x']>10)].index) #删除x小于0.01或大于10的行
更多推荐
所有评论(0)