所以我有几年的每周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
答案 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