标记数据时出错

时间:2016-09-02 03:55:12

标签: python pandas

这是我的代码:

import pandas
import datetime
from decimal import Decimal

file_ = open('myfile.csv', 'r')
result = pandas.read_csv(
    file_, header=None,
    names=('sec', 'date', 'sale', 'buy'),
    usecols=('date', 'sale', 'buy'),
    parse_dates=['date'],
    iterator=True,
    chunksize=100,
    compression=None,
    engine="c",
    date_parser=lambda dt: datetime.datetime.strptime(dt, '%Y%m%d %H:%M:%S.%f'),
    converters={'sale': (lambda u: Decimal(u)), 'buy': (lambda u: Decimal(u))}
)

然后我尝试......

result.get_chunk()

只是为了得到这样的错误:

CParserError: Error tokenizing data. C error: Expected 3 fields in line 3, saw 4

从这样的文件中(我只显示前4行 - 文件没有标题,所有行都有这种格式):

EUR/USD,20160701 00:00:00.071,1.11031,1.11033
EUR/USD,20160701 00:00:00.255,1.11031,1.11033
EUR/USD,20160701 00:00:00.256,1.11025,1.11033
EUR/USD,20160701 00:00:00.258,1.11027,1.11033
... > l0.000.000 lines like these

我的目的是让一个对象按块进行迭代,而不是将整个垃圾留在内存中(实际文件有560mb!)。我想丢弃第一列(有4列,但由于此文件在第一列中具有相同的值,我想丢弃此列)。我希望将第1,2和3列(丢弃0)保留为日期,销售和购买价格。

实际上这是我第一次尝试使用pandas,因为前一种解决方案使用标准的Python csv模块,并且需要花费很多时间。

我错过了什么?为什么我会收到这样的错误?

1 个答案:

答案 0 :(得分:1)

#try this code
import pandas as pd
import numpy as np
import csv

# To print only three columns , create a data frame,to do that give names to columns in csv file with ',' as seperator
myfile.csv:
sec,date,sale,buy
EUR/USD,20160701 00:00:00.071,1.11031,1.11033
EUR/USD,20160701 00:00:00.255,1.11031,1.11033
EUR/USD,20160701 00:00:00.256,1.11025,1.11033
EUR/USD,20160701 00:00:00.258,1.11027,1.11033

data = pd.read_csv('myfile.csv',sep=',')
df = pd.DataFrame({'date':data.date,'sale':data.sale,'buy':data.buy})
print(df)

output:
       buy                   date     sale
0  1.11033  20160701 00:00:00.071  1.11031
1  1.11033  20160701 00:00:00.255  1.11031
2  1.11033  20160701 00:00:00.256  1.11025
3  1.11033  20160701 00:00:00.258  1.11027