pandas——对csv文件进行增加列、删除列、删除行、修改、查找重复等系列操作

算是爬虫中对庞大的数据进行预处理的很重要的一步。
经过一段时间的工作不断完善,功能上基本实现了我的预期。

最终结果csv文件大概长这样

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)
发布了22 篇原创文章 · 获赞 18 · 访问量 7194

猜你喜欢

转载自blog.csdn.net/weixin_43525427/article/details/98745889
今日推荐