免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 20226 | 回复: 13
打印 上一主题 下一主题

Python Pandas read_csv报错 [复制链接]

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-10 17:35 |只看该作者 |倒序浏览
我加载了一个hpux的syslog.log日志,运行后直接报错如下:
C:\Python27\Lib\site-packages\pandas\io\parsers.pyc in parser_f(filepath_or_buff
er, sep, dialect, compression, doublequote, escapechar, quotechar, quoting, skip
initialspace, lineterminator, header, index_col, names, prefix, skiprows, skipfo
oter, skip_footer, na_values, na_fvalues, true_values, false_values, delimiter,
converters, dtype, usecols, engine, delim_whitespace, as_recarray, na_filter, co
mpact_ints, use_unsigned, low_memory, buffer_lines, warn_bad_lines, error_bad_li
nes, keep_default_na, thousands, comment, decimal, parse_dates, keep_date_col, d
ayfirst, date_parser, memory_map, float_precision, nrows, iterator, chunksize, v
erbose, encoding, squeeze, mangle_dupe_cols, tupleize_cols, infer_datetime_forma
t, skip_blank_lines)
    472                     skip_blank_lines=skip_blank_lines)
    473--> 474         return _read(filepath_or_buffer, kwds)
    475
    476     parser_f.__name__ = name

C:\Python27\Lib\site-packages\pandas\io\parsers.pyc in _read(filepath_or_buffer,
kwds)
    258         return parser
    259--> 260     return parser.read()
    261
    262 _parser_defaults = {

C:\Python27\Lib\site-packages\pandas\io\parsers.pyc in read(self, nrows)
    719                 raise ValueError('skip_footer not supported for iteration')
    720--> 721         ret = self._engine.read(nrows)
    722
    723         if self.options.get('as_recarray'):

C:\Python27\Lib\site-packages\pandas\io\parsers.pyc in read(self, nrows)
   1168
   1169         try:
-> 1170             data = self._reader.read(nrows)
   1171         except StopIteration:
   1172             if nrows is None:

pandas\parser.pyx in pandas.parser.TextReader.read (pandas\parser.c:7566)()
pandas\parser.pyx in pandas.parser.TextReader._read_low_memory (pandas\parser.c:7806)()
pandas\parser.pyx in pandas.parser.TextReader._read_rows (pandas\parser.c:8423)()
pandas\parser.pyx in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:8297)()
pandas\parser.pyx in pandas.parser.raise_parser_error (pandas\parser.c:20715)()
CParserError: Error tokenizing data. C error: Expected 1 fields in line 5, saw 2

syslog部分内容如下:
Apr 20 09:54:29 xovm02 syslogd: restart
Apr 20 09:54:29 xovm02 vmunix:
Apr 20 09:54:29 xovm02 vmunix: MFS is defined: base= 0xe0000001022d7000  size= 52000 KB
Apr 20 09:54:29 xovm02 vmunix: Loaded ACPI revision 2.0 tables.
Apr 20 09:54:29 xovm02 vmunix: MCA recovery subsystem disabled, not supported on this platform.
Apr 20 09:54:29 xovm02 vmunix: Using /stand/ext_ioconfig
Apr 20 09:54:29 xovm02 vmunix: Memory Class Setup
Apr 20 09:54:29 xovm02 vmunix: -------------------------------------------------------------------------
Apr 20 09:54:29 xovm02 vmunix: Class     Physmem              Lockmem              Swapmem
Apr 20 09:54:29 xovm02 vmunix:
Apr 20 09:54:29 xovm02  above message repeats 3 times
Apr 20 09:54:29 xovm02 vmunix: System :  5838 MB              5838 MB              5838 MB            
Apr 20 09:54:29 xovm02 vmunix: Kernel :  5838 MB              5838 MB              5838 MB            
Apr 20 09:54:29 xovm02 vmunix: User   :  5152 MB              4567 MB              4585 MB            
Apr 20 09:54:29 xovm02 vmunix:
Apr 20 09:54:29 xovm02 vmunix: ktracer is off until requested.
Apr 20 09:54:29 xovm02 vmunix: Installing Socket Protocol families AF_INET and AF_INET6
Apr 20 09:54:29 xovm02 vmunix: -------------------------------------------------------------------------
Apr 20 09:54:29 xovm02  above message repeats 2 times
Apr 20 09:54:29 xovm02 vmunix: 64000/0xfa00 esvroot
Apr 20 09:54:29 xovm02 vmunix: Kernel EVM initialized
Apr 20 09:54:29 xovm02 vmunix: 64000/0x0 mass_storage
Apr 20 09:54:29 xovm02 vmunix: 64000/0x0/0x0 usb_ms_scsi
Apr 20 09:54:29 xovm02 vmunix: sec_init(): kernel RPC authentication/security initialization.
Apr 20 09:54:29 xovm02 vmunix: secgss_init():  kernel RPCSEC_GSS security initialization.
Apr 20 09:54:29 xovm02 vmunix: rpc_init(): kernel RPC initialization.
Apr 20 09:54:29 xovm02 vmunix: rpcmod_install(): kernel RPC STREAMS module "rpcmod" installation. ...(driver_install)
Apr 20 09:54:29 xovm02 vmunix: NOTICE: nfs_client_pv3_install(): nfs3 File system was registered at index 10.
Apr 20 09:54:29 xovm02 vmunix: NOTICE: nfs_client_pv4_install(): nfs4 File system was registered at index 11.
Apr 20 09:54:29 xovm02 vmunix: NOTICE: cachefsc_install: cachefs File system was registered at index 13.
Apr 20 09:54:29 xovm02 vmunix: btlan_load() Loaded Successfully
Apr 20 09:54:29 xovm02 vmunix: hpvmguestdvr load completed.
Apr 20 09:54:29 xovm02 vmunix: 0 cec_gen

是否是因为里面有部分特殊字符?请高手帮忙看看

论坛徽章:
0
2 [报告]
发表于 2015-09-10 18:30 |只看该作者
syslog.log 是一个CSV文件 ? ? ?

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
3 [报告]
发表于 2015-09-10 23:59 |只看该作者
不是  是一个日志,我理解就算没有逗号分隔符,顶多把一行内容作为一个colunm就可以了吧,我试过去掉其中部分内容,读取就正常了,可能还是和字符串有关,有人遇到过类似情况么?

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
4 [报告]
发表于 2015-09-11 09:38 |只看该作者
回复 1# risepp
失败原因很简单,没有设定分隔符的情况下,默认使用","作为分隔条符。
而作为一个Field的情况下,像第五行,出现了",",这时,csv在parsing会认为数据有问题,因为这时parse的状态是应当只有一列,但是因为","的出现,这行数据变成了两列,所以数据是有问题的。

你可以把整个文件里面的半角","换成全角",“,免得数据库读取之后不容易看明白,但是这个只是workaround,不是非常好的解决方案。

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
5 [报告]
发表于 2015-09-16 10:13 |只看该作者
确实如上所说,增加了sep参数,制定分隔符为空格就不会报错了,而且我发现他加载数据后会将重复的数据剔除掉:
原始数据如下:
Sep 10 15:11:41 xovm02 lvmpud[2352]: Complete task ticket=13749 type=1 status=0
Sep 10 15:26:41 xovm02 lvmpud[2352]: Read task ticket=13750 type=1
Sep 10 15:26:41 xovm02 lvmpud[2352]: Process task ticket=13750 type=1

加载后的数据为:
Sep 10 14:56:47 xovm02 NaN                  above    message repeats          NaN
            15:11:41 xovm02 lvmpud[2352]: Read     task    ticket=13749     NaN
                                                                 Process  task    ticket=13749     NaN
                                                                 Complete task    ticket=13749     NaN
            15:26:41 xovm02 lvmpud[2352]: Read     task    ticket=13750     NaN
                                                                 Process  task    ticket=13750     NaN

多谢指点,非常感谢

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
6 [报告]
发表于 2015-09-16 10:14 |只看该作者
因为是分析日志,是否有办法将其中的时间内容提取为一个字段,余下的部分提取为一个字段呢?我看说明文档中:
sep or delimiter:Character sequence or regular expression to use to split fields in each row
也支持正则表达式

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
7 [报告]
发表于 2015-09-16 10:58 |只看该作者
回复 6# risepp
不需要正则这么麻烦,在你的Log里面,机器名就可以用来分隔。
reader = pandas.read_csv("test.log", header=None, sep=" xovm02", engine='python', parse_dates=[0])
reader.values

array([[Timestamp('2015-04-20 09:54:29'), ' syslogd: restart'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix:'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: MFS is defined: base= 0xe0000001022d7000  size= 52000 KB'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: Loaded ACPI revision 2.0 tables.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: MCA recovery subsystem disabled, not supported on this platform.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: Using /stand/ext_ioconfig'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix: Memory Class Setup'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: -------------------------------------------------------------------------'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: Class     Physmem              Lockmem              Swapmem'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix:'],
       [Timestamp('2015-04-20 09:54:29'), '  above message repeats 3 times'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: System :  5838 MB              5838 MB              5838 MB'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: Kernel :  5838 MB              5838 MB              5838 MB'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: User   :  5152 MB              4567 MB              4585 MB'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix:'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: ktracer is off until requested.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: Installing Socket Protocol families AF_INET and AF_INET6'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: -------------------------------------------------------------------------'],
       [Timestamp('2015-04-20 09:54:29'), '  above message repeats 2 times'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix: 64000/0xfa00 esvroot'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix: Kernel EVM initialized'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix: 64000/0x0 mass_storage'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: 64000/0x0/0x0 usb_ms_scsi'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: sec_init(): kernel RPC authentication/security initialization.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: secgss_init():  kernel RPCSEC_GSS security initialization.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: rpc_init(): kernel RPC initialization.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: rpcmod_install(): kernel RPC STREAMS module "rpcmod" installation. ...(driver_install)'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: NOTICE: nfs_client_pv3_install(): nfs3 File system was registered at index 10.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: NOTICE: nfs_client_pv4_install(): nfs4 File system was registered at index 11.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: NOTICE: cachefsc_install: cachefs File system was registered at index 13.'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: btlan_load() Loaded Successfully'],
       [Timestamp('2015-04-20 09:54:29'),
        ' vmunix: hpvmguestdvr load completed.'],
       [Timestamp('2015-04-20 09:54:29'), ' vmunix: 0 cec_gen']], dtype=object)

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
8 [报告]
发表于 2015-09-16 12:16 |只看该作者
多谢,和我想得类似,不过我在添加header选项的时候报错了:
>>> result = pd.read_csv('c:\syslog.log', header=['x','y'], sep=" xovm02")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 474, in parser
_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 250, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 566, in __init
__
    self._make_engine(self.engine)
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 711, in _make_
engine
    self._engine = klass(self.f, **self.options)
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 1429, in __ini
t__
    self.columns, self.num_original_columns = self._infer_columns()
  File "C:\Python27\Lib\site-packages\pandas\io\parsers.py", line 1637, in _infe
r_columns
    header = list(header) + [header[-1] + 1]
TypeError: cannot concatenate 'str' and 'int' objects

是我的写法错了么?另外你命令里面engine='python', parse_dates=[0]这两个参数是干啥用的啊?请告知,非常感谢

论坛徽章:
6
IT运维版块每日发帖之星
日期:2015-09-05 06:20:00IT运维版块每日发帖之星
日期:2015-09-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-17 06:20:00IT运维版块每周发帖之星
日期:2015-11-06 19:28:13IT运维版块每日发帖之星
日期:2015-11-07 06:20:00操作系统版块每周发帖之星
日期:2015-12-02 15:01:04
9 [报告]
发表于 2015-09-16 12:17 |只看该作者
我去,是用错了,应该是用names参数
result = pd.read_csv('c:\syslog.log', names=['x','y'], sep=" xovm02")

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
10 [报告]
发表于 2015-09-16 13:35 |只看该作者
回复 8# risepp
engine='python'可以忽略,影响不大。
parse_dates=[0]是指,把第一列转换成时间(因为是从0开始计量)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP