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

该博客介绍了如何使用pandas进行CSV文件处理,包括合并文件、读取、删除重复行、修改内容、删除和重命名列、插入列、删除指定行范围、删除0项行等操作,适用于数据预处理和爬虫项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

最终结果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)   #写入符合条件的行

在这里插入图片描述

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]
### 如何使用Pandas删除CSV文件中含有特定字符串的 当处理CSV文件时,有时需要移除含有某些特定字符或模式的。这可以通过`pandas`库来实现,该库提供了一个强大而灵活的数据分析工具集[^1]。 为了完成此操作,首先应当加载CSV文件到DataFrame对象中: ```python import pandas as pd df = pd.read_csv('example.csv') ``` 假设目标是从数据框中去除那些名称包含某个特殊字符串(比如"unwanted")的所有,则可以采用如下方法构建一个新的不含这些的数据帧: ```python columns_to_drop = [col for col in df.columns if 'unwanted' in str(col)] df_cleaned = df.drop(columns=columns_to_drop) ``` 上述代码片段创建了一个表推导式,用于筛选出所有在其名字内含有所谓“不想要”的关键词的名,并将其传递给`.drop()`函数以执实际的删除动作。 如果意图基于的内容而非其标题来进过滤——即查找并丢弃任何单元格值等于预定义字符串的整——那么可调整策略如下所示: ```python def contains_specific_string(series, target_str): return series.astype(str).str.contains(target_str).any() columns_with_target_str = list(df.apply(lambda x: contains_specific_string(x, 'target'), axis=0)) df_filtered = df.loc[:, ~columns_with_target_str] ``` 这里定义了一个辅助函数`contains_specific_string`用来判断一整个系列里是否存在指定的目标字符串;接着利用`apply()`配合自定义逻辑遍历每一,最终得到一个布尔型序指示哪些位置对应着应被排除掉的特征向量[^2]。 一旦完成了所需变换之后,记得保存更新后的表格回磁盘上: ```python df_cleaned.to_csv('cleaned_example.csv', index=False) ``` 这样就实现了从原始输入源剔除非期望部分的功能需求。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dear Slim.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值