1. 程式人生 > >讀寫csv檔案 可選擇部分列進行操作 按列來統計 並形成字典

讀寫csv檔案 可選擇部分列進行操作 按列來統計 並形成字典

用pandas讀取部分列,可以參考第一部分程式碼。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
此程式將原始資料中無關的列給去掉了,只保留時間、ID、等列,另外pandas還在第一列添加了索引列
'''
import pandas as pd
from pandas import *
import os
import re

#返回指定路徑下所有".csv"檔案的檔名列表
def eachFile(filepath):
    pathDir =  os.listdir(filepath)  #返回指定路徑下所有檔名的列表
    dir_list = []
    for allDir in pathDir:
        if re.search('.csv', allDir) != None:
            dir_list.append(allDir)
    return dir_list

#讀取原始資料中需要的列,並存之於新檔案中
def modify(filename):
    path = u"G:\\研究\\SZ_AWS\\SZ_AWS\\" + filename
    file = open(path,errors = 'ignore')
    #usecols控制程式只讀部分列的資料
    data = pd.read_csv(file, usecols=['DDATETIME', 'OBTID', 'WD3SMAXDF', 'WD3SMAXDD', 'WD10MAXDF', 'WD10MAXDD'])  #pandas讀取csv時選擇第一行來標記一列
    filename = u'G:\\研究\\AWS\\AWS\\mod\\modified_' + filename
    data.to_csv(filename)  #pandas寫檔案時會在你的資料前加一列索引
    print(filename + ' has been successfully created!')

if __name__ == '__main__':
    filePath = u"G:\\研究\\SZ_AWS\\SZ_AWS\\"  #檔案所在的路徑
    dir_list = eachFile(filePath)  #檔名列表
    print(dir_list)
    
    for filename in dir_list:
        modify(filename)

第二部分程式碼是我想要統計站點記錄的資料總數,比如A站點資料多少個,B站點資料多少個,最後將所有少於一定數量的站點給刪除。這裡可以直接將pandas讀取出的series資料給轉換成熟悉的字典來進行後續處理:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import csv
import sys
import os
import re
import pandas as pd
import numpy as np

#返回指定目錄下的所有.csv檔案
def eachFile(filepath):
    pathDir =  os.listdir(filepath)  #返回指定路徑下所有檔案和資料夾的名字,並存放於一個列表中
    dir_list = []
    for allDir in pathDir:
        if re.search('.csv', allDir) != None:  #search()會掃描整個string查詢匹配,會掃描整個字串並返回第一個成功的匹配
            dir_list.append(allDir)
    return dir_list

#返回檔案中資料少於6132個的站點的列表
def less_70pct_ID(file):
	f = open(file)
	data = pd.read_csv(f, usecols = ['OBTID'])
	cnt = data['OBTID'].value_counts()  #統計OBTID這一列,每個值出現的次數,返回的是一個series型別
	cnt.to_dict()  #將series型別轉換成字典型別
	lst_of_less_70pct_ID = []
	for ID in cnt.keys():
		if cnt[ID] < 6132:  #365*24*70%=6132,站點記錄的資料若是小於此值,則不合格
			lst_of_less_70pct_ID.append(ID)
			print(ID,':',cnt[ID])
	return lst_of_less_70pct_ID

#將將列表去重後返回該列表
def rmv_rpt(lst):
	new_lst = []
	for ID in lst:
		if ID not in new_lst:
			new_lst.append(ID)
	return new_lst


def rmv_unwanted_ID(filename, unwanted_ID_lst):
	sav_filename = filename.replace('stage1', 'stage2')  #repalce()方法是把字串中所有匹配到的都替換,並不是只替換第一個匹配到的子串
	if os.path.exists(sav_filename):
		os.remove(sav_filename)        #刪除檔案
	with open(sav_filename, 'w', newline = '') as target_f:
		writer = csv.writer(target_f)
		with open(filename, 'r') as src_f:  
			rows = csv.reader(src_f)   #這樣讀csv檔案,遍歷時每一行是一個列表
			to_save_line1 = 1
			cnt = 0
			for row in rows:
				cnt = cnt + 1
				if to_save_line1 == 1:      #第一行說明性內容儲存下來
					writer.writerow(row)
					to_save_line1 = 0
					continue
				elif row[1] not in unwanted_ID_lst:  #ID不屬於unwanted_ID_lst則改行可保留
					writer.writerow(row)
	print(sav_filename + 'has successfully created!')


if __name__ == '__main__':
	#獲取目標檔案列表
	filepath = u'G:\\深圳季風研究\\SZ_AWS\\SZ_AWS\\mod\\qualified_stage1_modified_data\\'
	dir_list = eachFile(filepath)

	#獲取資料中不滿足一致性的站點的列表
	lst_of_less_70pct_ID = []
	for file in dir_list:
		print(file)
		file = filepath + file
		print(file)
		year_lst_of_less_70pct_ID = less_70pct_ID(file)
		print(year_lst_of_less_70pct_ID)
		lst_of_less_70pct_ID = lst_of_less_70pct_ID + year_lst_of_less_70pct_ID
	lst_of_less_70pct_ID = rmv_rpt(lst_of_less_70pct_ID)
	print(lst_of_less_70pct_ID)
	

	for file in dir_list:
		file = filepath + file
		print(file)
		rmv_unwanted_ID(file, lst_of_less_70pct_ID)

相關推薦

csv檔案 選擇分列進行操作 統計 形成字典

用pandas讀取部分列,可以參考第一部分程式碼。 #!/usr/bin/env python # -*- coding: UTF-8 -*- ''' 此程式將原始資料中無關的列給去掉了,只保留時間、ID、等列,另外pandas還在第一列添加了索引列 ''' import

STL 使用ofstream + ifstream csv檔案

csv檔案,每行的資料是用逗號分隔的,讀寫csv檔案的示例程式碼如下: #include "stdafx.h" #include <iostream> #include <string> #include <vector> #include <fst

pythoncsv檔案方法總結

python提供了大量的庫,可以非常方便的進行各種操作,現在把python中實現讀寫csv檔案的方法使用程式的方式呈現出來。 1、使用csv讀寫csv檔案方法總結 reader()函式是一個閱讀器把閱讀的CSV檔案每一行以一個列表表示出來以至於你可以用for迴圈來遍歷他 讀檔案的時候,開啟檔

Python.csv檔案

# encoding: UTF-8 import csv # 讀取csv檔案 stocks_list = [] #方式一 # file = open(u'../Output.csv', u"r") # data = csv.reader(file) # 返回的是迭代型別 #方式二 with

支援各種特殊字元的 CSV 解析類 (.net 實現)(C#CSV檔案)

CSV是一種十分簡潔的資料結構,在DOTNET平臺實際使用中發現微軟官方並沒有提供預設的方法,而網上好多例子發現實現並不嚴謹甚至一些含有明顯錯誤,所以後面自己實現了一個讀寫工具類,這裡發出來希望方便後面朋友(難免還是會有考慮不到的地方,可隨時郵件聯絡) 使用該工具可對csv檔案進行讀寫(甚至不用去了解CSV的

python按鈕csv檔案

from Tkinter import * import cv2 import matplotlib.pyplot as plt import matplotlib.image as mpimg import os import shutil import csv file

(java筆記)javaCSV檔案的方法

CSV檔案 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存表格資料(數字和文字)。純文字意味著該檔案是一個字元序列,不含必須像二進位制數字那樣被解讀的資料。CSV檔案由任意數目的記錄組成,記

【C++】CSV檔案

新建CSV檔案:建txt——另存(UTF-8)——字尾.csv CSVparser.hpp #ifndef _CSVPARSER_HPP_ # define _CSVPARSER_HPP_ # include <stdexcept>

sparkcsv檔案

如果是spark1.6.0請新增maven: <dependency> <groupId>com.databricks</groupId> <artifactId>s

pySparkCSV檔案、查重寫入CSV檔案

前段時間在研究 pySpark 資料處理,深刻地感受到spark的極大魅力。自己是一個初學者,這篇部落格也只是簡單的完成了幾個簡單的工作任務,哈哈@@不說了上程式碼:from pyspark import SparkConf,SparkContext import csv

javaCSV檔案的兩種方法

BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "GBK")) ;// 附加 上述程式碼片段作用: 轉碼 逗號分隔值(Com

python資料儲存系列教程——python(pandas)csv檔案

全棧工程師開發手冊 (作者:欒鵬) CSV檔案的規範 1、使用回車換行(兩個字元)作為行分隔符,最後一行資料可以沒有這兩個字元。 2、標題行是否需要,要雙方顯示約定 3、每行記錄的欄位數要相同,使用逗號分隔。逗號是預設使用的值

python csv檔案

1. 將DataFrame資料寫入csv (1)用 csv包一行一行的寫入   import csv #python2可以用file替代open with open("test.csv","w") as csvfile:      writer =

openCSVCSV檔案

        openCSV是一款簡單的用於解析CSV檔案的java類庫,它封裝了CSV格式檔案的讀寫操作,可將檔案與java物件進行自動對映,自定義分隔符,使用轉義符等。 在使用時有幾點需要注意下:         1、       生成的csv檔案用EXCEL開啟時,

Pythoncsv檔案的幾種方法 及 pandas.read_csv引數全解

''' Python讀寫csv檔案 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號), 其檔案以純文字形式儲存表格資料(數字和文字)。 純文字意味著該檔案是一個字元序列,不含必須像二進位制數字那樣被解讀的資

「Python」pythoncsv檔案增加行列

# -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28:17 2017 @author: Shawn Yuen """ import csv

使用 Python csv 檔案

非關係型資料庫中,以文件型的資料庫 MongoDB 最為著名。還有一個很好的全文檢索引擎 Elasticsearch,基本上也可以當做一個文件型的資料庫來使用。 建立 csv 檔案: import csv with open("./csv_tutot

Python3csv檔案

新手做機器學習,很多東西都得一點一點積累,第一步從讀寫csv資料檔案開始,檔案中包含列名。 1、讀入csv檔案 import csv with open("filename.csv","r",encoding="utf-8") as csvfile:

pandas學習之concat合併及CSV檔案

讀取CSV檔案 讀取中文的CSV檔案中有中文,用“UTF-8”會出現亂碼問題,解決: import pandas as pd import numpy as np data=pd.read_csv('C:/Users/elenawang/Desktop/

使用pythonCSV檔案的三種方法

Python讀寫csv檔案 覺得有用的話,歡迎一起討論相互學習~Follow Me 前言 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為