关于这篇博文提到的所有函数都可以在 IO Tools (Text, CSV, HDF5, …) 找到。
首先我们来列举一下 pandas 处理文件的函数1:
- pd.read_csv(filepath):从 CSV 文件导入数据
- pd.read_table(filepath):从限定分隔符的文本文件导入数据
- pd.read_excel(filepath):从 Excel 文件导入数据
- pd.read_sql(query, connection_object):从 SQL 表 / 库导入数据
- pd.read_json(json_string):从 JSON 格式的字符串导入数据
- pd.read_html(url):解析 URL、字符串或者 HTML 文件,抽取其中的 tables 表格
- pd.read_clipboard():从你的粘贴板获取内容,并传给 read_table()
- pd.DataFrame(dict):从字典对象导入数据,Key 是列名,Value 是数据
想要读取具有明显分隔符的数据,我们可以采用的函数是:
与此问有关的相关参数有三个:sep, delimiter, delim_whitespace,具体含义以 pandas.read_table
为例,翻译出处 英文原文
sep
: str, defaults to ‘,’ for read_csv(), \t for read_table()
分隔符使用。如果sep为None,将尝试自动确定这一点。长度大于1个字符且与’\s+‘不同的分隔符将被解释为正则表达式,将强制使用Python解析引擎,并忽略数据中的引号。正则表达式示例:’\r\t’。
delimiter
: str,默认None
sep的备用参数名称。
delim_whitespace
: boolean,default False指定是否使用空格(例如’ ‘或’\t’)作为分隔符。相当于设置sep=’\s+’。如果此选项设置为True,则不应为delimiter参数传入任何内容。
版本0.18.1中的新功能:支持Python解析器。
我们想要读取什么分隔符特征的数据主要就靠指定上述三个参数。其中 delim_whitespace
只在以空格为分隔符的数据中有用。
下面我们就来简单介绍利用这两个函数怎么读取一些具有常见分隔符的数据。
文章目录
读取以空格为分割符的数据
如图,上面有一个以空格为分隔符的文件
pd.read_csv
>>> dataframe = pd.read_csv(r"C:\Users\Administrator\Desktop\data.txt", header=None, sep=' ')
>>> dataframe
0 1 2 3 4 5 6 7
0 46.19 99.74 29.00 86.38 52.35 29.89 99.07 83.01
1 24.16 99.99 27.88 43.85 40.05 28.84 99.89 82.92
... 为了减少所占空间,省略了一些
13 97.58 99.43 28.53 81.55 80.44 27.40 84.57 82.59
14 95.23 97.37 28.19 63.28 86.51 26.90 73.27 82.08
pd.read_table
>>> dataframe = pd.read_table(r"C:\Users\Administrator\Desktop\data.txt", header=None, delim_whitespace=True)
>>> dataframe
0 1 2 3 4 5 6 7
0 46.19 99.74 29.00 86.38 52.35 29.89 99.07 83.01
1 24.16 99.99 27.88 43.85 40.05 28.84 99.89 82.92
...
13 97.58 99.43 28.53 81.55 80.44 27.40 84.57 82.59
14 95.23 97.37 28.19 63.28 86.51 26.90 73.27 82.08
读取以逗号为分隔符的数据
pd.read_csv
>>> dataframe = pd.read_csv(r"C:\Users\Administrator\Desktop\data.txt", header=None) # 默认就是以 , 为分隔符。
>>> dataframe
0 1 2 3 4 5 6 7
0 46.19 99.74 29.00 86.38 52.35 29.89 99.07 83.01
1 24.16 99.99 27.88 43.85 40.05 28.84 99.89 82.92
...
13 97.58 99.43 28.53 81.55 80.44 27.40 84.57 82.59
14 95.23 97.37 28.19 63.28 86.51 26.90 73.27 82.08
pd.read_table
>>> dataframe = pd.read_table(r"C:\Users\Administrator\Desktop\data.txt", header=None, delimiter=',')
>>> dataframe
0 1 2 3 4 5 6 7
0 46.19 99.74 29.00 86.38 52.35 29.89 99.07 83.01
1 24.16 99.99 27.88 43.85 40.05 28.84 99.89 82.92
...
13 97.58 99.43 28.53 81.55 80.44 27.40 84.57 82.59
14 95.23 97.37 28.19 63.28 86.51 26.90 73.27 82.08
常见错误
OSError: Initializing from file failed
出现这个错误的原因很可能是你的路径名中带有中文
解决方案有两种2
- 在 read_csv 之前先用 open 函数
f = open('人效日报-20180701.csv')
data = pd.read_csv(f, skiprows=1, header=None)
- 不加 open 函数,在 read_csv 里面设置 engine 参数
data = pd.read_csv('人效日报-20180701.csv', skiprows=1, header=None, engine='python')
后话
我们同样也有一系列以 to_
开头函数来将 DataFrame 对象写入文件中。如果你写入的时候不想将 header 和 index 写入文件中,可以指定对应参数为 None
https://blog.csdn.net/qq_32618817/article/details/81361009 ↩︎