首页 > pandas 阅读数:26

pandas文本文件的读写

文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。CSV 是一种用分隔符分隔的文件格式,因为其分隔符不一定是逗号,因此,又被称为字符分隔文件。

CSV 文件是以纯文件形式存储表格数据(数字和文本)的,它最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的、无规范的格式)。因为大量程序都支持 CSV 或者其变体,因此可以作为大多数程序的输入和输出格式。

文本文件读取

pandas 在处理千万行级别的数据时有很高的实用价值,通过将文本数据读取加载到内存中,再利用 pandas 进行数据处理运算,效率非常高。

常用的文本文件有 CSV 文件和 TXT 文本文件,pandas 提供了一些用于将表格型文本数据读取为 DataFrame 对象的函数,常用的有 read_csv() 和 read_table() 函数。
  • read_csv() 函数:从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号(“,”)。
  • read_table() 函数:从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(“\t”)。

read_csv() 函数的语法格式如下:

pandas.read_csv(file, sep=',', header='infer', names=None, index_col=0,
                             dtype=None, encoding=utf-8, engine=None, nrows=None)


read_table() 函数的语法格式如下:

pandas.read_table(file, sep='\t', header='infer',  index_col=None,
                               dtype=None, encoding=utf-8, engine=None, nrows=None)


read_csv() 和 read_table() 函数的大多数参数相同,函数中常用参数说明如下:
  • file:接收 string,表示 CSV 或 TXT 的文件名和路径;
  • sep:接收 string,表示分隔符,read_csv() 默认为逗号,read_table() 默认为制表符;
  • header:接收 int 或 sequence,表示将某行数据作为列名。默认为 infer,表示自动识别;
  • names:接收 array,表示列名,默认为 None;
  • index_col:接收 int、sequence 或 False,表示索引列的位置,取值为 sequence 则代表多重索引,默认为 None;
  • dtype:接收 dict,代表写入的数据类型(列名为 key,数据格式为 values,默认为 None);
  • engine:接收 C 或 Python,表示数据解析引擎,默认为 C;
  • nrows:接收 int。表示读取前 n 行,默认为 None;
  • encoding:表示文件的编码方式。常用的编码方式有 UTF-8、UTF-16、GBK、GB2312、GB18030 等。

以员工月工资收入信息为例,用 read_csv() 和 read_table() 函数分别读取 salary.csv 文件和 salary.txt 文件。

【例 1 】现有一个包含有员工姓名、性别、年龄和月工资收入的 salary.csv 文件,文件前 3 条数据内容如下。
name,sex,age,salary
李明,男,24,3600
王小红,女,28,4000
杨勇,男,30,4500
其中第一行数据 name,sex,age,salary 是列名,每列数据用逗号隔开。

并将 salary.csv 文件另存为 salary.txt 文件,再分别读取 salary.csv 和 salary.txt 文件。

示例代码 test1.py 如下。
# -*- coding: utf-8 -*-
import pandas as pd
print('数据文件保存在d盘的data目录下')
df = pd.read_csv('d:\data\salary.csv',encoding='GBK')
print('输出df:','\n',df)
df1 = pd.read_table('d:\data\salary.txt',encoding='GBK',sep='\t
print('输出df1:','\n',df1)
在读取文本文件时,要注意设置文件的编码方式(encoding)和分隔符(sep)等参数。

文本文件存储

文本文件的存储与其读取类似,对于结构化的数据,可以通过 pandas 中的 to_csv() 函数实现以 CSV 文件格式存储。to_csv() 函数的语法格式如下:

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', columns=None,
                             header=True, index=True, index_label=None, mode='w', encoding=None)

函数中的参数说明如下:
  • path_or_buf:接收 string,表示保存的文件名和路径;
  • sep:接收 string,表示分隔符,默认为逗号;
  • na_rep:接收 string,表示缺失值,默认为"";
  • columns:接收 list,表示写出的列名;
  • header:接收 boolean,表示是否将列名写出,默认为 True;
  • index:接收 boolean,表示是否将行名(索引)写出,默认为 True;
  • index_label:接收 sequence,表示索引名,默认为 None;
  • mode:接收特定的 string,表示数据写入的模式,默认为“w”;
  • encoding:接收特定的 string,表示存储文件的编码格式。

【例 2 】以【例 1】读取的员工月工资收入信息为例,在读取 salary.csv 文件后,在 DataFrame 对象中增加一个员工工资收入信息为(周斌,男,35,5000),然后将增加后的数据重新存储到 salaryadd.csv 文件中。

示例代码 test2.py 如下。
# -*- coding: utf-8 -*-
import pandas as pd

print('数据文件保存在d盘的data目录下')
df = pd.read_csv('d:\data\salary.csv',encoding='GBK')
print('输出df:','\n',df)
df.loc['add_row'] = ['周斌','男',35,5000]
print('输出df:','\n',df)
df.to_csv('D:\data\salaryadd.csv',encoding='GBK')
代码运行后,可到 data 目录下查看是否有 salaryadd.csv 文件。