Py学习  »  Python

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

热爱代码的小方 • 3 年前 • 115 次点击  


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

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
 
115 次点击