繼續講一點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十分方便數據切片、篩選、合並等操作。關於數據寫的相關操作以后再講吧。