1. 程式人生 > >Python同時讀取多個csv檔案,進行簡單的資料處理

Python同時讀取多個csv檔案,進行簡單的資料處理

#匯入相應模組
import re
import os 
import pandas as pd
import numpy as np
# 讀取 10個csv 檔案
path = 'E:/round1/'
files = os.listdir(path)
files_csv = list(filter(lambda x: x[-4:]=='.csv' , files))
#定義一個空列表
data_list = []
#函式re.compile將正則表示式(以字串書寫的)轉換為模式物件
num_filter = re.compile(r'\d+')


通過help可以看到compile方法的介紹,返回一個pattern物件,但是卻沒有對第二個引數flags進行介紹。第二個引數flags是匹配模式,可以使用按位或'|'表示同時生效,也可以在正則表示式字串中指定。Pattern物件是不能直接例項化的,只能通過compile方法得到。匹配模式有:
1).re.I(re.IGNORECASE): 忽略大小寫 
2).re.M(MULTILINE): 多行模式,改變'^'和'$'的行為 
3).re.S(DOTALL): 點任意匹配模式,改變'.'的行為 
4).re.L(LOCALE): 使預定字元類 \w \W \b \B \s \S 取決於當前區域設定 
5).re.U(UNICODE): 使預定字元類 \w \W \b \B \s \S \d \D 取決於unicode定義的字元屬性
6).re.X(VERBOSE): 詳細模式。這個模式下正則表示式可以是多行,忽略空白字元,並可以加入註釋。
# 迴圈讀取檔案中‘code','close'兩列,並新增一列'rank'
for file in files_csv: tmp = pd.read_csv(path + file)[['code', 'close']] tmp['rank'] = num_filter.findall(file)[0] data_list.append(tmp)
# 將讀入的資料連線
all_data = pd.concat(data_list)
all_data.head()


根據執行結果,可以看出我們所新增的那一列的數值是根據所連線的列表的filename有關係的。
tmp['rank'] = num_filter.findall(file)[0],就是說新增的這一列的“rank”就等於所讀入的file的name.
# 將‘rank'一列資料賦值給all_data_rank
all_data_rank = pd.to_numeric(all_data['rank'])
all_data.dtypes

為了方便後面的排序,我們先檢視一下資料的型別,由結果可以看出,rank一列的資料是object型的,所以我們就用到pd.to_numeric。 對於明顯是數值的資料,轉換型別直接採用 pd.to_numeric 。
# 刪除'rank'一列
all_data = all_data.drop('rank', axis = 1)
# 在0列插入一列'rank'值為all_data_rank的值
all_data.insert(0, 'rank', all_data_rank)
# 將資料按照'code','rank'的值排序
a = all_data.sort_values(by = ['code','rank']) 
# 取code 的唯一值,並求其長度
len(a.code.unique())  # 長度為737
code = a.code.unique()
# 重複十遍,並生成列表
code = code.repeat(10)
code = code.tolist()
# 迴圈1~10,並重復迴圈737次,生成列表
x = np.arange(1,11, step = 1)
y=np.tile(x,737)
y = y.tolist()

 用repeat和tile擴充陣列元素,例如,
In [32]: a=np.arange(10)
In [33]: a
Out[33]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [34]: a.repeat(5)
Out[34]:
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4,
4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9,
9, 9, 9, 9])
In [40]: np.tile(a,2)
Out[40]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 以生成的兩個列表生成新的資料框
y = pd.DataFrame({'rank': y,'code': code})
y.head()
coderank
0stock1000101
1stock1000102
2stock1000103
3stock1000104
4stock1000105
# 將資料框和新生成的資料框左連線
b = pd.merge(y, a, how='left') 
sum(b.isnull().values)# 檢視資料框的缺失值
array([ 0, 0, 153])
# 將資料根據“code”進行分組
group_rank = b.groupby(['code'])
# 分別向前先後填充缺失值
d = b.fillna(method = 'bfill',limit = 3)  #用limit限制每列可以替代NaN的數目
d = d.fillna(method = 'ffill')
sum(d.isnull().values)
array([0, 0, 0])

當資料中存在NaN缺失值時,我們可以用其他數值替代NaN,主要用到了DataFrame.fillna()方法,
使用0替代缺失值(當然你可以用任意一個數字代替NaN);
df.fillna(0) 
用一個字串代替缺失值;
df.fillna('missing') 
用前一個數據代替NaN:method='pad'或者 method='ffill';
df.fillna(method='pad') 
與pad相反,bfill表示用後一個數據代替NaN;df.fillna(method='pad') 
這裡我們增加一個知識點,用limit限制每列可以替代NaN的數目;
df.fillna(method='bfill',limit=1) 
除了上面用一個具體的值來代替NaN之外,還可以使用平均數或者其他描述性統計量來代替NaN;
df.fillna(df.mean() 


相關推薦

Python同時讀取csv檔案進行簡單資料處理

#匯入相應模組 import re import os import pandas as pd import numpy as np# 讀取 10個csv 檔案 path = 'E:/round1/' files = os.listdir(path) files_csv =

tensorflow 批量讀取csv檔案

tensorflow 批量讀取多個csv檔案 #!/usr/bin/python # -*- coding:utf-8 -*- import tensorflow as tf import os def csvfile(fileist): file_queue=tf.train.str

Python合併(拼接)CSV檔案

筆者最近做資料分析與挖掘,經常遇到要合併CSV檔案的問題,正好練習Python遂使用Python的Pandas庫進行拼接,記下和大家分享,大家有更好的方法歡迎評論交流。 ''' Data:2017-

js讀取EXCEL檔案進行一些資料處理

1.僅在IE瀏覽器下有效,因為只有IE支援ActiveXObject("Excel.application"); 2.程式碼如下 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

java讀取配置檔案封裝類支援同時讀取檔案

在springmvc中 通常需要用java程式碼讀取resource資原始檔中的properties配置檔案,我的辦法將支援同時讀取多個檔案. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import

appium+python自動化60-windows上同時啟動appium服務android機器並行運行

pre tps yam rom 啟動app 技術分享 AI 如果 aapt 前言 做android自動化的時候,啟動一個appium服務,只能匹配一個手機去自動化執行。有時候想同一套代碼,可以在不同的手機上執行,測下app在不同手機上兼容性。 這就需要啟動多個appium服

java程式碼實現CSV檔案讀取、將資料拆分成CSV檔案資料匯出到CSV檔案

package com.cn; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; impor

Python實現讀取/批量txt檔案合併成一個txt(示例為tcga資料處理

本程式 功能:將tcga資料的批量txt檔案合併成一個txt原始的第一個txt(代表一個病人)的資料內容 合併之後的txt資料,基因名不變,只是把病人的表達量收集到一起 操作說明:本人測試通過的執行環境:Python 2.7  Windows 7 64bit  cmd命令執行

Struts2學習筆記:DMI配置檔案預設Action字尾

動態方法呼叫有三種方法: 1.同一Action多次對映,每個action標籤的method對應要呼叫的方法。 當要呼叫的方法多了就會增加struts.xml檔案的複雜性。 2.struts.DynamicMethodInvocation=true (struts.properties檔案) 或<

關於python同時變數從鍵盤輸入賦值

這裡以一道題為例,輸入三角形的三邊長來判斷是怎樣的三角形。 由於老師要求使用input()函式,所以這裡說一下python的input()函式,當要給多個變數賦值時通常格式為a,b,c=map(int,input().split()),後面的這個split()函式是用於分割

windows系統下 如何將.csv檔案合成一個.的詳細步驟。

1、新建一個text文字, 2、複製如下程式碼:  @echo off E: cd csv2 dir copy *.csv 2all_keywords.csv echo @@@@@@@@@@@@@合

python同時變數賦值

Python允許你同時為多個變數賦值。例如: a = b = c = 1 以上例項,建立一個整型物件,值為1,三個變數被分配到相同的記憶體空間上。 您也可以為多個物件指定多個變數。例如: a, b, c = 1, 2, "john" 以上例項,兩個整型物

Spring中配置和讀取Properties檔案--轉

    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">       &

main方法中同時載入Spring檔案

 public static void main(String[] args) { // 初始化ClassPathXmlApplicationContext   ApplicationContext context=new FileSystemXmlApplicationContext   (  //配置檔案

julia如何同時開啟文字檔案並對其寫入資料

# 本文將簡要介紹一下如何同時開啟多個文字檔案並對其寫入資料 # 程式碼如下 n = 10 # 檔案數 filelist = Vector{String}(n) # 建立10個空字串 for i = 1:n filelist[i] = string( i

csv檔案合併到一個csv

將所有的csv檔案放到一個資料夾,位置任意。開啟cmd,切換到存放csv的資料夾,也可以在csv資料夾中,按住shift加滑鼠右鍵,選擇在此處開啟命令視窗。輸入copy *.csv all-groups.csv,all-group的名字,可以任意。然後按enter,等待

csv檔案合併到一個excel檔案的不同的sheet中

清楚工作表和工作簿的區別,下面的程式碼可以把同文件夾下的CSV檔案複製到一個工作簿的不同工作表中。但在EXCEL2003中工作表的數量不能超過256個,否則會出錯。 Private Sub copy_csvfile_to_excel() Dim MyPath$, myFi

csv檔案寫入同一個excel中的不同sheet表中

pandas 的Dataframe的to_csv()會覆蓋掉之前寫入的表,最終導致excel中只有一個sheet 所以在這裡用ExcelWriter實現寫多個sheet # coding=utf_8_sig import pandas as pd from openpyx

讀取Properties檔案

package net.hxtek.util; import java.io.IOException; /** * 讀取Properties檔案列舉類 * 2014-3-13 下午2:12:18 * */ public enum PropUtil { SMS("

Python_合併資料夾下的csv檔案

# -*- coding:utf8 -*- import os.path import os import csv import re path = "D:\Datebase\data1\DataChallengeOne" #i = 0 files = os.listdir(path) with open(