文章目錄
- 1. 使用語言和包
- 1.1 python環境安裝
- 1.2 pandas包的安裝(這里只是一個例子)
- 2. 要做的一個資料處理
- 2.1 資料處理的需求:
- 2.2 代碼實作
- 2.2.1 思路
- 2.2.2 讀入原來的表
- 2.2.3 找到速度為零的所有記錄
- 2.2.4 找到對應的車(要刪的)
- 2.2.5 寫一個新的表格(洗掉操作完成后)
- 2.3 代碼執行
- 3. 代碼放上來吧:
這篇博客是一個經濟管理學院的同學讓我幫忙處理資料之后,心血來潮寫一篇教程類的博客,面向的是非計算機專業的同學,所以比較基礎
1. 使用語言和包
這里我用的是python進行處理,So, why python?
- Python語法相對簡單,不是程式員的話,當做工具來用還是不錯的,(如果是程式員,我建議還是C語言起步,充分了解相關概念和語法,其他的語言相比C語言都多多少少做了簡化)
- 其次Python里面封裝好的包有很多很多,所以很多操作,我們不需要自己寫函式,大大減少了在寫代碼上花費的時間
- 比較安全,這里說的有點牽強,不過我也要強調一下,曾經在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
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
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
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")
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)))
之后點擊右上角的執行按鈕就可以運行了

執行之后我們會發現這里多了一個"new_data.csv"

打開后發現就是處理結束后的表:

3. 代碼放上來吧:
這個家伙是代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225361.html
標籤:python
下一篇:2020-11-19
