重复值处理
- 把数据结构中,行相同的数据只保留一行。
- 函数:drop_duplicates()
from pandas import read_csv
df = read_csv('/Users/cuiwenhao/Data_xxx/4.3/data.csv')
print(df)
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
2 1251147 商品毛重 0.61kg
3 1251147 商品产地 中国
4 1251147 品牌 Apple
5 1251147 商品名称 苹果iPad mini 3
6 1251147 硬盘 128G
7 1251147 尺寸 7.8英寸-9英寸
#找出行重复的位置
dIndex = df.duplicated()
print(dIndex)
0 False
1 False
2 False
3 False
4 True
5 True
6 False
7 False
dtype: bool
#根据某些列,找出重复的位置
dIndex_id = df.duplicated('id')
print(dIndex_id)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
dIndex_idkey = df.duplicated(['id', 'key'])
print(dIndex_idkey)
0 False
1 False
2 False
3 False
4 True
5 True
6 False
7 False
dtype: bool
#根据返回值,把重复数据提取出来
print(df[dIndex])
id key value
4 1251147 品牌 Apple
5 1251147 商品名称 苹果iPad mini 3
#原值
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
2 1251147 商品毛重 0.61kg
3 1251147 商品产地 中国
4 1251147 品牌 Apple
5 1251147 商品名称 苹果iPad mini 3
6 1251147 硬盘 128G
7 1251147 尺寸 7.8英寸-9英寸
#直接删除重复值
#默认根据所有的列,进行删除
newDF = df.drop_duplicates()
print(newDF)
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
2 1251147 商品毛重 0.61kg
3 1251147 商品产地 中国
6 1251147 硬盘 128G
7 1251147 尺寸 7.8英寸-9英寸
#当然也可以指定某一列,进行重复值处理
newDF_id= df.drop_duplicates('id')
print(newDF_id)
id key value
0 1251147 品牌 Apple
缺失数据处理
- dropna函数作用:去除数值结果中值为空的数据
- drop函数语法:dropna()
from pandas import read_csv
df = read_csv( '/Users/cuiwenhao/Data_xxx/4.4/data.csv')
print(df)
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
2 1251147 商品毛重 NaN
3 1251147 NaN 中国
4 1251147 硬盘 128G
5 1251147 尺寸 7.8英寸-9英寸
#找出空值的位置
isNA = df.isnull()
print(isNA)#找出NaN值
id key value
0 False False False
1 False False False
2 False False True
3 False True False
4 False False False
5 False False False
#获取出空值所在的行
df[isNA.any(axis=1)]
id key value
2 1251147 商品毛重 NaN
3 1251147 NaN 中国
#key为空值的行
df[isNA[['key']].any(axis=1)]
id key value
3 1251147 NaN 中国
#key和value为空值的行
df[isNA[['key', 'value']].any(axis=1)]
id key value
2 1251147 商品毛重 NaN
3 1251147 NaN 中国
#NaN填充为未知
df.fillna('未知')
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
2 1251147 商品毛重 未知
3 1251147 未知 中国
4 1251147 硬盘 128G
5 1251147 尺寸 7.8英寸-9英寸
#直接删除空值
newDF = df.dropna()
id key value
0 1251147 品牌 Apple
1 1251147 商品名称 苹果iPad mini 3
4 1251147 硬盘 128G
5 1251147 尺寸 7.8英寸-9英寸
字段抽取
from pandas import read_csv
df = read_csv( '/Users/cuiwenhao/Data_xxx/4.6/data.csv')
print(df)
tel
0 18922254812
1 13522255003
2 13422259938
3 18822256753
4 18922253721
5 13422259313
6 13822254373
7 13322252452
8 18922257681
#转为字符串类型
df['tel']=df['tel'].astype(str)
#运营商
bands = df['tel'].str.slice(0, 3)
print(bands)
0 189
1 135
2 134
3 188
4 189
5 134
6 138
7 133
8 189
Name: tel, dtype: object
#地区
areas = df['tel'].str.slice(3, 7)
print(areas)
0 2225
1 2225
2 2225
3 2225
4 2225
5 2225
6 2225
7 2225
8 2225
Name: tel, dtype: object
#号码段
nums = df['tel'].str.slice(7, 11)
print(nums)
0 4812
1 5003
2 9938
3 6753
4 3721
5 9313
6 4373
7 2452
8 7681
Name: tel, dtype: object
#赋值回去
df['bands'] = bands
df['areas'] = areas
df['nums'] = nums
print(df)
tel bands areas nums
0 18922254812 189 2225 4812
1 13522255003 135 2225 5003
2 13422259938 134 2225 9938
3 18822256753 188 2225 6753
4 18922253721 189 2225 3721
5 13422259313 134 2225 9313
6 13822254373 138 2225 4373
7 13322252452 133 2225 2452
8 18922257681 189 2225 7681
字段拆分
from pandas import read_csv
df = read_csv('/Users/cuiwenhao/Data_xxx/4.5/data.csv')
print(df)
id name
0 1 KEN
1 2 JIMI
2 3 John
newName1 = df['name'].str.lstrip()
0 KEN
1 JIMI
2 John
newName2 = df['name'].str.rstrip()
0 KEN
1 JIMI
2 John
newName3 = df['name'].str.strip()
0 KEN
1 JIMI
2 John
df['name'] = newName3
id name
0 1 KEN
1 2 JIMI
2 3 John
记录抽取
- 常用的条件类型
- 比较运算
大于>,小于<,大于等于>=,小于等于<=,不等于!=
例如:df[df.comments>10000];
- 范围运算 between(left,right)
df[df.commentsbetween(1000,100000];
- 空值匹配 pandas.isnull(column)
例如:df[pandas.isnull(df.title)]
- 字符匹配
str.contains(patten,na=False)
例如:df[df.title.str.contains('台电',na=False)]
- 逻辑运算
与& 或| 非not
例如:df[(df.comments>=1000)&(df.comments<=10000)]
与上面的运算范围df[df.commentsbetween(1000,100000];等价
from pandas import read_csv
df = read_csv('/Users/cuiwenhao/Data_xxx/4.8/data.csv',sep='|')
print(df)
#单条件
df[df.comments>10000]
id comments title
0 1197453 10071 华为(HUAWEI)荣耀平板 Wifi版 8英寸平板电脑(高通骁龙四核 1280×800 1G/8G 4800mAh)银色
1 1192330 6879 小米(MI)7.9英寸平板 WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536视网膜屏 800W)白色
2 1225995 2218 小米(MI)7.9英寸平板 WIFI 16GB(NVIDIA Tegra K1 2.2GHz 2G 16G 2048*1536视网膜屏 800W)浅绿色
3 1308557 1605 华为(HUAWEI)荣耀平板优享版 Wifi 8英寸平板电脑(高通骁龙 64位四核1280×800 2G/16G 4800mAh)香槟金
4 1185287 836 微软(Microsoft) Surface Pro 3(中文版 Intel i5 128G存储 4G内存)MQ2-00014
5 1197789 2084
6 996957 11123 Apple iPad Air MD785CH 9.7英寸平板电脑 (16G WiFi版)深空灰色
7 1150612 5857 台电(Teclast) P98 3G八核 9.7英寸平板电脑(MTK8392 Air视网膜屏1300W摄像头 2G/16GB 超薄7.4mm)前白后金
8 1285329 2482 台电(Teclast)X98 Air 3G 双系统版 9.7英寸平板电脑(正版Win8+安卓 3G通话 Intel 3736F Air屏)前白后灰
#多条件
df[df.comments.between(1000, 10000)]
#过滤空值所在行
df[pandas.isnull(df.title)]
#根据关键字过滤
df[df.title.str.contains('台电', na=False)]
#~为取反
df[~df.title.str.contains('台电', na=False)]
#组合逻辑条件
df[(df.comments>=1000) & (df.comments<=10000)]
网友评论