带有sep ='::'

时间:2018-12-04 11:49:13

标签: python-3.x pandas

我正在研究 Python进行数据分析,在第二章中,我正在介绍一些入门示例。在第27页上,它显示以下代码:

import pandas as pd
users = pd.read_table('ml-1m/users.dat', sep='::', header=None,
names=unames)

这是指向github .dat文件的链接: https://github.com/wesm/pydata-book/tree/2nd-edition/datasets/movielens

运行此代码时,出现以下错误:

(base) C:\Users\d.kelly\Desktop\Python\PforDA>pforda.py
C:\Users\d.kelly\Desktop\Python\PforDA\PforDA.py:3: ParserWarning: Falling back
to the 'python' engine because the 'c' engine does not support regex separators
(separators > 1 char and different from '\s+' are interpreted as regex); you can
 avoid this warning by specifying engine='python'.
  users = pd.read_table('users.dat', sep = '::', header = None, names = unames)

我正在使用Anaconda和Python 3-可以肯定这本书是为Python 2.7编写的,但是我仍然想知道如何使该示例在没有错误消息的情况下工作。 Wes是个聪明人,我肯定会再遇到2位数字分隔符。

我的问题是,在Python 3中,什么是使用Pandas的read_table读取2位数字分隔符而不得到警告的正确方法?

1 个答案:

答案 0 :(得分:1)

由于已定义参数header=None,因此不需要参数names,为避免警告,请添加engine='python'

unames = ['a','b','c', 'd']
users = pd.read_table('users.dat', sep='::', names=unames, engine='python')
#alternative
#users = pd.read_csv('users.dat', sep='::', names=unames, engine='python')
print (users.head())
   a   b   c      d
1  F   1  10  48067
2  M  56  16  70072
3  M  25  15  55117
4  M  45   7  02460
5  M  25  20  55455

read_tableread_csv之间的区别是默认分隔符,如果定义自定义两者的工作方式相同。

  

pandas.read_table
  sep:str,默认为t(制表位)

     

pandas.read_csv
  sep:str,默认','