python pandas 读取文件——读取具有明显分隔符的数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_41104353/article/details/85052343

关于这篇博文提到的所有函数都可以在 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 只在以空格为分隔符的数据中有用。

下面我们就来简单介绍利用这两个函数怎么读取一些具有常见分隔符的数据。

扫描二维码关注公众号,回复: 4558420 查看本文章

读取以空格为分割符的数据

在这里插入图片描述
如图,上面有一个以空格为分隔符的文件

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

  1. 在 read_csv 之前先用 open 函数
f = open('人效日报-20180701.csv')
data = pd.read_csv(f, skiprows=1, header=None)
  1. 不加 open 函数,在 read_csv 里面设置 engine 参数
data = pd.read_csv('人效日报-20180701.csv', skiprows=1, header=None, engine='python')

后话

我们同样也有一系列以 to_ 开头函数来讲 DataFrame 对象写入文件中。如果你写入的时候不想将 header 和 index 写入文件中,可以指定对应参数为 None


  1. https://zhuanlan.zhihu.com/p/25630700 ↩︎

  2. https://blog.csdn.net/qq_32618817/article/details/81361009 ↩︎

猜你喜欢

转载自blog.csdn.net/sinat_41104353/article/details/85052343
今日推荐