Python数据清洗处理,csv,pandas,数据匹配

数据处理、csv、pandas、数据匹配、虚拟变量、分组统计
摘要由CSDN通过智能技术生成

写在前面

本人python新手一枚,最近毕业论文需要用python处理数据,大概就是两年前学过一些python基础,最近重新把python捡起来了,由于这个数据处理过程对我这种新手来说过于艰难,所以想要把它记录下来,方便以后需要的时候再回顾,也希望其他同学遇到类似问题的时候可以更快找到解决方法~

下面正文开始

1. 要用到的库

import os
import pandas as pd
import openpyxl
import csv
import xlrd

2. 遍历文件夹,获取文件夹下的文件路径

#遍历某个文件夹下的所有文件,并将其路径存储到列表里
#这里只遍历了两层,如果有更多层文件夹的话可以继续往下遍历
def get_files():
    l = []
    directory = '文件夹路径'
    for f in os.listdir(directory):
        file_path = os.path.join(directory,f) #第一层
        for folder in os.listdir(file_path):
            files = os.path.join(file_path, folder) #第二层    
        l.append(files)
    return l
path = get_files()

3. 文件合并

如果上面文件夹里的文件是xlsx文件,则直接使用pd.read_excel()函数。
如果是xls文件,则使用pd.read_excel(文件路径,engine=‘xlrd’, index_col=False)

for i in path:
    df = pd.read_csv(i,index_col=False)
    df = df.loc[:, ['区域','板块','租金', '被叫手机号', '被叫姓名','被叫时长(秒)', '拨打时间']] #这里定义的是选取该文件的哪些列,全部都保留的话可以省略这条
    df.to_csv('文件路径.csv',mode='a',index=False) #这里的'a'是追加的意思,方便合并
    print(i)

4. 数据清洗

#去除重复数据
df2 = pd.read_csv('文件路径',index_col=False)
df2.drop_duplicates(inplace=True)
print('finish part2')

#把以下列的所有空值赋值为null后,删除含有null的行
df2['被叫手机号'] = df2['被叫手机号'].fillna('null')
df2 = df2[~df2['被叫手机号'].isin(['null'])]#该方法也可以用来删除包含特定字段的行
df2.to_csv('文件路径',mode='w',index=False) #做完去重和缺失值处理后写入文件
print('finish part3')

5. 遍历csv文件的每一行

因为我的数据需要,pandas里面我不知道怎么去遍历每一行,所以我用了csv这个包,如果某一行的数据不符合要求就删掉,把符合要求的写进一个新的csv里面

import csv
l = []
f = open('文件路径','r',encoding='utf-8')
reader = csv.reader(f)
f1 = open('文件路径','w+',encoding='utf-8',newline='')
writer = csv.writer(f1)
header = ['区域','板块','租金', '被叫手机号', '被叫姓名','被叫时长(秒)', '拨打时间']
writer.writerow(header)
#下面是判断手机号是不是以1开头,长度为11位,如果不是就删掉
#名字里有没有测试这两个字,如果有也删掉
for line in reader:
    if line[4][0] != '1':
        #print(line[2])
        continue
    if len(line[4]) != 11:
        #print(line[2])
        continue
    if '测试' in line[5]:
        continue
    else:
        writer.writerow(line)
print('finish')
f.close()
f1.close()

数据清洗阶段基本上就完成了,如果还有其他需求的小伙伴也可以根据上面的内容自行修改。

接下来就是进行一些数据的计算、分组统计和匹配等等,这里仅列出比较通用的部分。

6. 数据计算和匹配

- 分组统计

如果你的数据里同一个id或者同一个时间有多个值,那么就可以用pandas里的groupby函数进行分组计数、求和、求平均值等等。groupby用法很多,可自行百度。

df = pd.read_csv('文件路径',index_col=False)
g = df.groupby(['id','月份'])['被叫次数'].sum().reset_index()#这里是求每个人每个月一个被呼叫了多少次,用的是sum函数。
g.to_csv('文件路径',mode='w',index=False)

如果需要计数的话需要用count()或size()函数,这两个函数的区别是count()只计算有值的数,size则是就算该行有缺失值也会计算进去。

- 数据匹配

当有两个或多个表格,它们中包含同一个唯一字段(即数据库里的主码)需要根据该字段进行匹配时,可以用pandas的merge函数。

left = pd.read_csv('文件路径',index_col=False)
right = pd.read_csv('文件路径',index_col=False)
#right = right.loc[:,['id','房东电话','月份']] 可以只选取其中部分字段
result 
  • 4
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas是一个强大的数据处理库,可以用于处理CSV数据。根据引用\[1\],你可以使用Pandas的groupby函数对数据进行分组计数、求和、求平均值等操作。例如,你可以使用groupby函数按照id和月份对数据进行分组,并使用sum函数计算每个人每个月被呼叫的次数。然后,你可以使用to_csv函数将结果保存到CSV文件中。 另外,根据引用\[2\],你可以使用insert函数向DataFrame中插入数据。你可以指定插入的位置、列名和值。如果需要插入多列数据,可以使用列表作为值。此外,你还可以使用replace函数替换DataFrame中的特定值。 对于处理CSV数据中的空行,根据引用\[3\],你可以使用dropna函数删除空行。你可以根据具体情况选择不同的删除方法,如删除一般空行或列表式空行。你可以使用isnull函数判断空值,并使用~运算符删除空行。另外,你还可以使用dropna函数删除包含空行的列。 综上所述,使用Pandas处理CSV数据可以通过groupby函数进行分组计算,使用insert函数插入数据,使用replace函数替换特定值,使用dropna函数删除空行。希望这些信息对你有帮助。 #### 引用[.reference_title] - *1* [Python数据清洗处理csvpandas数据匹配](https://blog.csdn.net/weixin_49373789/article/details/123347213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [pandas---数据处理csv文件)](https://blog.csdn.net/d_eng_/article/details/124829119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值