这是我的代码:
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模块,并且需要花费很多时间。
我错过了什么?为什么我会收到这样的错误?
答案 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