對於CSV及txt后綴的文本文件,分別使用pandas模塊中的read_csv函數和read_table函數
文件類型 |
函數名稱 |
CSV |
read_csv() |
txt |
read_table() |
1. read_table函數的參數
read_table(filepath_or_buffer , sep='\t' , header='infer' ,
names=None , index _col=None , usecols=None , dtype=None ,
converters=None , skiprows=None , skipfooter=None , nrows=None ,
na_values=None , skip_blank_lines=True , parse_dates=False ,
thousands= None , comment=None , encoding=None)
2. 參數解釋
序號 |
參數名稱 |
描述 |
1 |
filepath_or_buffer |
文件路徑、指定存儲數據的URL或者文件型對象 |
2 |
sep |
指定原數據集中分割每行字段的分隔符,默認為tab制表符 |
3 |
header |
是否將原數據集中的第一行作為表頭,默認是0,將第一行作為變量名稱;如果原始數據中沒有表頭,該參數需要設置成None。 |
4 |
names |
如果原數據集中沒有列名,這個可以用來給數據添加列名。和header=None一起使用。 |
5 |
index _col |
指定數據集中的某些列(字段)作為數據的行索引(標簽) |
6 |
usecols |
指定要讀取哪些列(字段)的數據。 |
7 |
dtype |
為數據集中的每列設置不同的數據類型 |
8 |
converters |
通過字典格式,為數據集中的某些列(字段)設置轉換函數 |
9 |
skiprows |
指定需要跳過原數據集的起始行數 |
10 |
skipfooter |
指定需要跳過原數據集的末尾行數 |
11 |
nrows |
指定從文件開頭處讀入的行數 |
12 |
na_values |
指定原數據集中的哪些特征值為缺失值(默認將兩個分隔符之間的空值視為缺失值) |
13 |
skip_blank_lines |
跳過空白行,默認為True |
14 |
parse_dates |
嘗試將數據解析為datetime,默認為False。參數值為True時,則嘗試解析數據框的行索引;參數為列表,則嘗試解析對應的日期列;如果參數為嵌套列表,則將某些列合並為日期列;如果參數為字典,則解析對應的列(即字典中的值),並生成新的變量名(即字典中的鍵) |
15 |
thousands |
指定原數據集中的千分位符 ,例如','或'.' |
16 |
comment |
指定注釋符,在讀取數據時,如果碰到行首指定的注釋符,則跳過該行 |
17 |
encoding |
為防止中文亂碼,可以借助該參數解決(通常設置為“utf-8”或者“gbk”) |
18 |
chunksize |
用於迭代的塊大小 |
19 |
date_parser |
用於解析日期的函數 |
read_csv函數的參數與之完全一致,有一個不同點:sep參數值的默認值
文件類型 |
函數名稱 |
默認分隔符 |
CSV |
read_csv() |
參數的默認值為英文狀態下的逗號“,” |
txt |
read_table() |
參數的默認值為tab制表符 |
3 應用案例
有一個txt文件,內容如下:
2021年寒假留校過年的同學,帶“!”的同學因臨時變更選擇回家
如有變化,及時報送
0014,多隆,男,河北石家庄人
0015,陳近南,男,福建漳州人
! 0016,韋小寶,男,江蘇揚州人
0017,龍兒,女,神龍島人
!0018,鰲拜,內蒙古呼和浩特人
數據來源於鹿鼎大學人事部
抄送給康熙
要求只讀取編號、姓名、性別、籍貫等內容,且回家的不用讀,實現如下效果:
|
id |
name |
gender |
native place |
0 |
14 |
多隆 |
男 |
河北石家庄人 |
1 |
15 |
陳近南 |
男 |
福建漳州人 |
2 |
17 |
龍兒 |
女 |
神龍島人 |
代碼
import pandas as pd
#用read_table函數讀取文本文件的數據
data=pd.read_table(r'D:Desktop\新建文本文檔.txt', #文件路徑,前面的filepath_or_buffer符可以省略掉
sep=',', #指定數據中變量之間的分隔符,注意這里是中文的逗號 ,
header=None , #不需要將原來的數據中的第一行讀作表頭
names=['id','name','gender','native place'] , #重新為各列起變量名稱
converters={'id':str} , #將ID轉換為字符串,以免開頭的00消失
skiprows=2 , #跳過開頭的兩行數據
skipfooter=2, #跳過末尾的兩行數據
comment='!' #不讀取“!”開頭的數據行
)