算是爬虫中对庞大的数据进行预处理的很重要的一步。
经过一段时间的工作不断完善,功能上基本实现了我的预期。
import pandas as pd
import numpy as np
import re
import csv
import sys
这是我的引用import各种包。
1. 合并csv文件(在cmd中进行操作)
cat *.csv>all.csv
或者
cat 1.csv 2.csv 3.csv...>all.csv
(先通过cmd进入目录内,然后用上面的指令合并多个csv为all.csv)
1. 读csv文件
df=pd.read_csv('/Users/hey/Desktop/楼宇办公自动化_nodup.csv')
df=df.astype(str)
第一行是读指定目录下的特定文件,写的绝对路径
第二行通过转换里面的数据为str也就是字符串以便操作
3. 删除重复
df.drop_duplicates('name', 'first', inplace=True)
inplace=True意思就是应用修改到文件中,如果只是想在环境中跑跑试试可以去掉inplace=True,这样新的导出文件就不会有改动。
‘name’这一列写的是产品具体品牌型号等等,通过检查name就知道有没有商品爬重复了。
4. 写入CSV文件
df = df.to_csv("/Users/hey/Desktop/楼宇办公自动化_nodup.csv",index=0)
5. 删除包含关键字的行
y=df[df['brand'].str.contains('brand')] #显示出标题行
print(y)
df.drop(df.index[[2913]],inplace=True)
df = df.to_csv("/Users/hey/Desktop/楼宇办公自动化_nohead.csv",index=0)
我使用这几句的时候一般都是分开1、2和3、4的
1、2主要用途是显示出哪个列中包含的关键字在哪行,print出来。
【例如在例子中,我搜索‘brand’列内容包含‘brand’的单元格,打出他们的行下标】
在3、4行中把输出的line index放在括号里,以逗号分隔
最后老规矩,导出到新的csv
6. 将含有关键字的单元格字符串替换成自定义字符串
df.loc[df['typeSmall'].str.contains('。|:|;|/|、|,| |[0-9]|nan'), 'typeSmall'] = '其他'
将含有这些符号的typeSmall下单元格替换为‘其他’
df.loc[df['typeSmall'].str.contains('nan'), 'typeSmall'] = '其他'
将为空的单元格替换为‘其他’
7. 删除指定列
df.drop(['typeMedium'],axis=1,inplace=True)
将header为’typeMedium’的列删除
8. 列名称重命名
df.rename(columns={'hah':'typeBig','typeBig':'typeMedium','typeMedium':'typeSmall','typeSmall':'typeSmallPlus'}, inplace = True)
:前面是原名称,后面是要改为的新名字。
只用写需要改动的就好
9. 插入列
df.insert(5,'typeSmallSmall','')
这里的数字序号与数组相似
第一列插入为0
例子中为在第六列插入名为’typeSmallSmall’的一个新的列,全部赋值为空
10. 删除行(某个范围)
df.drop(df.index[2652:2711],inplace=True)
这里是删除2652行到2711行的内容
11. 查找重复
查重其实用得不多,说白了就是对于drop_duplicates的进一步应用。
中心思想是:
从df全集中删掉所有数据【为data1】,再用df减去data1就好了
当然,还可以选择只保留第一行
从df全集中删掉所有数据【为data1】,从df全集中去除重复只保留第一行【为data2】,再用df减去data1就好了
'''将有重复的全部去掉,保存到data1中'''
data1=df.drop_duplicates('name',keep=False)
print(data1)
'''将有重复的只保留第一行,保存到data1中'''
#data2=df.drop_duplicates('name', keep='first')
#print(data2)
'''用全集减去没有重复的部分=有重复的部分的所有数据'''
data3=df.append(data1).drop_duplicates(keep=False)
print(data3)
'''#所有数据按照'name'排列'''
y=data3.sort_values('name')
print(y)