读取和组合多个每周csv文件的问题

时间:2014-11-19 17:17:56

标签: python csv pandas concat import-from-csv

所以我有几年的每周CSV文件看起来像,形式为YYmmdd:

file = 'C:\\rig-070103'

我正在尝试阅读并将它们组合成一个数据集,最好是在一系列日期中。到目前为止,我有:

pieces = []


for date in range(100):
    path = 'C:\\rig-YYmmdd.csv' % date
    frame = pd.read_csv(path)
    #frame['Date']= date
    pieces.append(frame)
    dataset = pd.concat(pieces, ignore_index=True)
print(dataset)

But this is giving me the error: 
path = 'C:\\rig-YYmmdd.csv' % date
TypeError: not all arguments converted during string formatting

我知道这与我如何引用每个文件,任何建议有关?我还想创建另一个列,列出加载的每个文件的日期,因此每个文件的所有行重复1个日期。对此的任何帮助都非常感谢!

以下是数据示例:

Prov    Location    LSD Section Township    Range   Meridian ...
AB  00-00-006-29W4  0   0   6   29  4
AB  01-18-008-09W4  1   18  8   9   4
AB  05-10-008-10W4  5   10  8   10  4
AB  01-12-008-12W4  1   12  8   12  4
AB  09-23-008-26W4  9   23  8   26  4
AB  13-13-009-25W4  13  13  9   25  4

3 个答案:

答案 0 :(得分:1)

这里发生了一些事情:

首先,for date in range(100)将遍历整数0到99.没有任何日期可以找到。

接下来,path = 'C:\\rig-YYmmdd.csv' % date无效。 假设你实际上有一个datetime对象,你可以这样做:path = 'C:\\rig-%s.csv' % date.strftime('%y%m%d')

最后,您每次迭代都要编写/覆盖您的数据帧。那太傻了。

所以你的代码变成了

import pandas
pieces = []
columns = ['Prov', 'Objective', 'WellStatus', 'WellType']

for date in pandas.date_range('2012-01-01', periods=100):
    path = r'C:\rig-%s.csv' % date.strftime('%y%m%d')
    frame = pandas.read_csv(path, names=columns, encoding='utf-8')
    frame['date'] = date
    pieces.append(frame)

dataset = pandas.concat(pieces, ignore_index=True)
print(dataset)

答案 1 :(得分:1)

所以你在这里做了一些事情。一个是你需要一个日期范围,每个元素是一天。那天需要格式化为yymmdd。然后将csv拉入数据帧。然后为日期添加一个coumn。然后将其附加到主数据帧。这是一次尝试:

import pandas as pd

myDateList = pd.date_range('2003-01-01', periods=100)

myBigDf = pd.DataFrame()

for date in myDateList:
    path = 'C:\\rig-' + date.strftime('%y%m%d') + '.csv' 
    print path # show you what you got
    piece = pd.read_csv(path)
    piece['fileDate'] = date.strftime('%y%m%d')
    myBigDf.append(piece, ignore_index=True)

答案 2 :(得分:0)

正如追溯所示,这不是在字符串上使用模运算符的正确方法。您可以使用本教程(https://docs.python.org/2.4/lib/typesseq-strings.html)来了解它的使用方法。

要获取给定日期格式为yymmdd的字符串,您可以使用datetime模块(https://docs.python.org/2/library/datetime.html)和datetime.date的“strftime”函数,如下所示:

from datetime import date 
d = date(2007, 1, 13)
filename = d.strftime("C://rig-%y%m%d.csv")
#filename will be "C://rig-070113.csv"

如果您希望连续100天进行迭代,则必须使用datetime.timedelta:

from datetime import date, timedelta
one_day = timedelta(1)
act_day = date(2007, 1, 13)
for i in range(100):
    filename = act_day.strftime("C://rig-%y%m%d.csv")
    ...
    act_day += one_day