python中數據讀取的那些事——python讀取excel、txt


繼續講一點python讀取數據相關的操作為數據分析作准備。

利用pandas讀取

一般在做數據分析時最常接觸的就是逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。

而大多數情況下讀csv文件用pandas就可以搞定。

import pandas as pd
data = pd.read_csv('目錄/文件名')

要注意的是,如果直接pd.read_csv('文件名')要確保該文件在當前工作目錄下。如果使用上面的絕對路徑方法就不用將文件加入當前工作目錄。

如果只想讀取csv文件中部分數據也是可以的

data = pd.read_csv("文件名", usecols=['列名1', '列名2'])

當然在讀取過程中可以添加一些參數來達到對數據進行處理比如

 data = pd.read_csv("文件名",header=None,sep='\t' ) 

header就是指定dataframe的列名,默認為第一行,即header=0,要是不想讀取列名,則header=None就可以,sep主要是用來分列的,sep=’\t’意思是使用\t作為分隔符。

官方文檔指出對於read_csv()這個參數默認是英文逗號’ ,’而對於read_table()這個參數默認是制表符 ‘|t’ 。當然用戶可以根據自己csv文件格式的特點自行設置。read_csv()還有一個參數是 delimeter, 作用與sep相同,只不過delitemer的默認值為None,而不是英文逗號 ‘,’

如果是讀取以txt文件提供的數據,只需將pd.read_csv()改成pd.read_table即可

data = pd.read_table('文件名',header=None,encoding='gb2312',sep=',',index_col=0)

其中header=None:沒有每列的column name,可以自己設定,encoding=‘gb2312’:其他編碼中文顯示錯誤,sep=’,’:用逗號來分隔每行的數據,index_col=0:設置第1列數據作為index。

如果是Excel的其他格式xls、xlsx等,可以使用

data = pd.read_excel('filename.xlsx')

當然也可以將文件另存為csv格式讀取(有時候直接讀xls會報錯)。

注意:在讀csv的時候要確保行與行之間沒有空格。否則就會報錯。最后看下read_csv/table的全部相關參數

1.filepath_or_buffer:(這是唯一一個必須有的參數,其它都是按需求選用的)
文件所在處的路徑

2.sep:
指定分隔符,默認為逗號','

3.delimiter : str, default None
定界符,備選分隔符(如果指定該參數,則sep參數失效)

4.header:int or list of ints, default ‘infer’
指定哪一行作為表頭。默認設置為0(即第一行作為表頭),如果沒有表頭的話,要修改參數,設置header=None

5.names:
指定列的名稱,用列表表示。一般我們沒有表頭,即header=None時,這個用來添加列名就很有用啦!

6.index_col:
指定哪一列數據作為行索引,可以是一列,也可以多列。多列的話,會看到一個分層索引

7.prefix:
給列名添加前綴。如prefix="x",會出來"x1"、"x2"、"x3"醬紙

8.nrows : int, default None
需要讀取的行數(從文件頭開始算起)

9.encoding:
亂碼的時候用這個就是了,官網文檔看看用哪個:
https://docs.python.org/3/library/codecs.html#standard-encodings

10.skiprows : list-like or integer, default None
需要忽略的行數(從文件開始處算起),或需要跳過的行號列表(從0開始)。

其他方法

使用CSV模塊讀取csv文件

import csv 

csv_file=csv.reader(open('filename.csv','r'))
content=[] #用來存儲整個文件的數據,存成一個列表,列表的每一個元素又是一個列表,表示的是文件的某一行
for line in csv_file:
    content.append(line)

上面的過程其實就是遍歷csv文件的每一行,然后將每一行的數據作為一個元素存到設定好的list中,所以最終得到的是一個list。

使用python I/O 讀取CSV文件

使用python I/O方法進行讀取時即是新建一個List 列表然后按照先行后列的順序(類似C語言中的二維數組)將數據存進空的List對象中,如果需要將其轉化為numpy 數組也可以使用np.array(List name)進行對象之間的轉化。

data = []
with open(birth_weight_file) as csvfile:
    csv_reader = csv.reader(csvfile)  # 使用csv.reader讀取csvfile中的文件
    birth_header = next(csv_reader)  # 讀取第一行每一列的標題
    for row in csv_reader:  # 將csv 文件中的數據保存到birth_data中
        data(row)

使用tensorflow讀取數據(轉)

import tensorflow as tf
import os


def csvread(filelist):
    ''' 讀取CSV文件 :param filename: 路徑+文件名的列表 :return: 讀取內容 '''

    # 1. 構造文件的隊列
    file_queue = tf.train.string_input_producer(filelist)

    # 2. 構造csv閱讀器讀取隊列數據(按一行)
    reader = tf.TextLineReader()

    key,value = reader.read(file_queue)

    # 3.對每行內容解碼
    # record_defaults:指定每一個樣本的每一列的類型,指定默認值[['None'],[4.0]]
    records = [['None'],['None']]

    example,label = tf.decode_csv(value,record_defaults=records)

    # batch_size跟隊列,數據的數量沒有影響,只決定這批次取多少數據
    # 4. 想要讀取多個數據,就需要批處理
    example_batch,label_batch = tf.train.batch([example,label],batch_size=9,num_threads=1,capacity=9)
    # print(example,label)
    return example_batch,label_batch

if __name__ == '__main__':
    # 找到文件,構建列表
    filename = os.listdir('./data/csvdata/')

    # 拼接路徑 重新組成列表
    filelist = [os.path.join('./data/csvdata/',file) for file in filename]

    # 調用函數傳參
    example_batch,label_batch = csvread(filelist)

    # 開啟會話
    with tf.Session() as sess:
        # 定義一個線程協調器
        coord = tf.train.Coordinator()

        # 開啟讀文件的線程
        threads = tf.train.start_queue_runners(sess,coord=coord)

        # 打印讀取的內容
        print(sess.run([example_batch,label_batch]))


        # 回收子線程
        coord.request_stop()

        coord.join(threads)

使用xlrd讀取Excel

官方地址

安裝:pip install xlrd

簡單使用

import xlrd
# 打開文件
data = xlrd.open_workbook('filename.xlsx')

整體思路為,打開文件,選定表格,讀取行列內容,讀取表格內數據。

data.sheet_names()  # 獲取所有sheet名字
data.nsheets        # 獲取sheet數量
data.sheets()       # 獲取所有sheet對象
sheet1 = data.sheet_by_name("test")  # 通過sheet名查找
sheet2 = data.sheet_by_index(3)  # 通過索引查找
rows = sheet1.row_values(2)#獲取行內容
cols = sheet1.col_values(3)#獲取列內容

readline讀取txt

#第一種方法
f = open("data.txt","r")   #設置文件對象
line = f.readline()
line = line[:-1]
while line:             #直到讀取完文件
    line = f.readline()  #讀取一行文件,包括換行符
    line = line[:-1]     #去掉換行符,也可以不去
f.close() #關閉文件


#第二種方法
data = []
for line in open("data.txt","r"): #設置文件對象並讀取每一行文件
    data.append(line)               #將每一行文件加入到list中


#第三種方法
f = open("data.txt","r")   #設置文件對象
data = f.readlines()  #直接將文件中按行讀到list里,效果與方法2一樣
f.close()             #關閉文件

好了,以上就是python中讀取數據的一些常用方法,在遇到的時候肯定是首先選擇pandas,讀出來的就是dataframe十分方便數據切片、篩選、合並等操作。關於數據寫的相關操作以后再講吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM