我正在研究 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位数字分隔符而不得到警告的正确方法?
答案 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_table
和read_csv
之间的区别是默认分隔符,如果定义自定义两者的工作方式相同。
pandas.read_table
sep:str,默认为t(制表位)pandas.read_csv
sep:str,默认','