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

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

《pandas——对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

同样,也可以逐一追加写入这些行

注意,只能csv,excel追加起来比较麻烦。

file_filtered = 'filtered.csv'        # 新文件
df[0:0].to_csv(file_filtered, mode='a',header=1)    #标题行写入

for t in titles:
    y = df[df['merge'].str.contains(t)]            #显示出符合条件的行
    for i in y.index:
        df[i:i+1].to_csv(file_filtered, mode='a',header=0)   #写入符合条件的行

《pandas——对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行到2710行的内容

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)

12. 删除0项 / 含0项行

与drop不同,删除0项的命令可以变得很简便

例子中,我想删除所有‘资产负债率’为0的行:

df[df['资产负债率']!=0]

拓展一下,不仅仅是‘资产负债率’,有些数据处理中但凡有0值都不能接受。设定规则:删除所有项为0的行。

titles = ['总资产周转率','流动资产周转率','存货周转率','应收账款周转率','资产负债率','流动比率']
for t in titles:
    df = df[df[t]!=0]
    原文作者:Dear Slim.
    原文地址: https://blog.csdn.net/weixin_43525427/article/details/98745889
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞