社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

写给非计算机相关专业的同学——从零开始如何用python处理数据(包括如何安装环境)

热爱代码的小方 • 4 年前 • 168 次点击  


这篇博客是一个经济管理学院的同学让我帮忙处理数据之后,心血来潮写一篇教程类的博客,面向的是非计算机专业的同学,所以比较基础

1. 使用语言和包

这里我用的是python进行处理。So, why python?

  1. Python语法相对简单,不是程序员的话,当做工具来用还是不错的。(如果是程序员,我建议还是C语言起步,充分了解相关概念和语法,其他的语言相比C语言都多多少少做了简化)
  2. 其次Python里面封装好的包有很多很多,所以很多操作,我们不需要自己写函数,大大减少了在写代码上花费的时间
  3. 比较安全,这里说的有点牵强,不过我也要强调一下。曾经在C语言里面学习的指针,其值是一个内存地址。如果你代码能力不足,不小心让指针指向某个甚至某几个系统的变量,然后你还做了数据的更改,可能你的系统就被你弄坏了。Python大多数情况不需要你自己去定义,去写指针。所以,我说比较安全

1.1 python环境安装

这里我就用这位同学的电脑当做实例来讲解。
首先python她的电脑上是有的。按下"win+R":
在这里插入图片描述
输入CMD,然后确定
弹出的窗口中输入python,然后回车:

在这里插入图片描述
可以看到她安装的是python3.8,对于pandas这个包,版本已经足够了。
如果第一次安装当然直接装python3.8就好,如果之前装过,且版本在python2的时代,那你就比较麻烦啦,首先去装一个python3,然后后面需要在pycharm中更改python interperter,改为python3.
至于安装python我不想多讲,给个链接自己体会吧:
python3安装教程

接下来去官网下载pycharm,并安装
这里给个链接吧:
这个家伙是下载网址的连接
在这里插入图片描述
在这里插入图片描述

一般情况下,刚刚安装好的pycharm打开以后会出现这个情况:
在这里插入图片描述
那是因为你的pycharm还没有导入python interpreter,接下来点击左上角的file->settings
在这里插入图片描述
这里选择Project下的Python Interpreter:
在这里插入图片描述
啊!居然是空的。。。当然是空的啦,需要手动添加一下interpreter,点左上角那个齿轮,然后点add
在这里插入图片描述
接下来把你的之前安装好的python放进来就可以了:
在这里插入图片描述

1.2 pandas包的安装(这里只是一个例子)

这边数据处理我选择用的是pandas,其他的包安装起来都是一样的

上一步添加好了python的包之后,就能看到有这两个家伙已经在这里了:
在这里插入图片描述
接下来我们要去安装pandas,我仅提供一种安装方案吧,其他的去Baidu上都有
点击右边的“+”或者按下"ALT+INSERT"
在这里插入图片描述
如果在国内的话,我建议做这样一个操作,就是把下载地址改为清华源。国外的小伙伴们就不用啦,点击下方的Manage Repositories,进入下面这个页面:
在这里插入图片描述
点击右边的"+",输入这个地址:
https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述
然后把原先那个可以删了,点击确定。然后返回刚刚那个界面,在上方搜pandas,点击下面的install package就行了
在这里插入图片描述
然后你就会发现它在自动安装了:
在这里插入图片描述

2. 要做的一个数据处理

安装好了上述东西只是一个开始,接下来的东西才是重点–数据处理
由于不同数据的不同处理多种多样,我也不方便一次全讲了,只好拿这个例子,给尝试进行数据处理的同学们做一个示范:

2.1 数据处理的需求:

拿到一个很大的表,表里面每一行为一条记录,我现在要找出速度(第7列)都为0的车牌号(第3列),并且删除它们。
举个例子,下表中,7057和9205的两辆车是没有速度为0的记录的,所以是铁定不删的
然后是5052这辆车,有速度为0的记录,并且有速度不为0的记录,所以也是不删的(这里代码写不好的话,可能会误删)
最后是5752这辆车,所有的记录中,速度都为0,所以是需要删除的
在这里插入图片描述
这里就用一个简单的例子展示一下怎么用python

2.2 代码实现

这里如果我从零开始讲python的话,又可以写一本书了,所以,基础知识仍然是跳过,我只讲思路,然后直接给代码。当然我会尽力讲的细一些

2.2.1 思路

先读入的数据在一个二维数组中存储
先找出所有速度为零的行(返回一个包含所有行号的一位数组即可)
然后找到对应的车牌号,这些车都被列入即将删除的列表
然后找该车牌号所有的记录中的速度,如果出现非0,就不删,其他的都是一定要删的

2.2.2 读入原来的表

首先,这张csv表应该放在python工程的目录下,目录在这里打开

在这里插入图片描述
接下来打开那张表,我直接写了一个函数,输入是该文件的文件名(不要打.csv),然后返回一个二维数组

def read_data(file_name = 'old'):
    with open('{}.csv'.format(file_name), 'r', encoding='utf-8') as rf:
        data = list(csv.reader(rf))
    return data
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

2.2.3 找到速度为零的所有记录

找出所有速度为零的行(返回一个包含所有行号的一位数组即可)

这里给新手的提示,首先数组是0开始的,所有第7列这边就要写6
其次表格里存的0,我们读进来以后其实是字符,而非一个整数,所以这里是‘0’

#这个是用来找哪一行有0的函数!!
def find_zeros(table):
    rownums = []
    for rownum in range(len(table)):
        if (table[rownum][6] == '0'):
            rownums.append(rownum)
    return rownums
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.2.4 找到对应的车(要删的)

然后找到对应的车牌号,这些车都被列入即将删除的列表
然后找该车牌号所有的记录中的速度,如果出现非0,就不删,其他的都是一定要删的

#这个函数用来找那些要删的车,返回的是一个行号的列表
def find_all_zero_cars(table,zero_rownums):
    row_of_car_nums=[]

    #find all the cars
    car_number=[]
    for rownum in zero_rownums:
        car_number.append(table[rownum][2])

    for number_of_car in range(len(car_number)):
        going_be_deleted = True
        for i in range(len(table)):
            if ((table[i][2] == car_number[number_of_car]) and not(table[i][6]=='0')):
                going_be_deleted = False
        if (going_be_deleted):
            row_of_car_nums.append(car_number[number_of_car])

    return row_of_car_nums
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.2.5 写一个新的表格(删除操作完成后)

def delete_data(car_numbers):
    file_new = 'new_data.csv'
    file_old = 'old.csv'
    with open(file_old,'r',newline='',encoding='utf-8')as file_old, \
            open(file_new,'w',newline='',encoding='utf-8') as file_new:
        f_csv_old = csv.reader(file_old)
        f_csv_new = csv.writer(file_new)
        for i, rows in enumerate(f_csv_old):  # 保留header
            if i == 0:
                f_csv_new.writerow(rows)
                break
        for index in range(len(car_numbers)):
            for rows in f_csv_old:
                if rows[2] != car_numbers[index]:
                    f_csv_new.writerow(rows)

    os.remove("old.csv")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.3 代码执行

代码的执行都是在main函数中的,所以,想要执行上面的函数,就需要在main函数中调用。

这里在提示新手一下,上面的包安装后需要Import一下

import csv
import os
import data_dispose

if __name__ == '__main__':
    table = read_data()
    print(len(table))
    delete_data(data_dispose.find_all_zero_cars(table,data_dispose.find_zeros(table)))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

之后点击右上角的执行按钮就可以运行了
在这里插入图片描述
执行之后我们会发现这里多了一个"new_data.csv"
在这里插入图片描述
打开后发现就是处理结束后的表:
在这里插入图片描述

3. 代码放上来吧:

这个家伙是代码

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99149
 
168 次点击