【发布时间】:2018-01-01 12:42:05
【问题描述】:
我需要编写一个脚本来读取过去 14 天(每天早上)具有特定名称的所有 csv 文件,但是当我执行 concat 时,这给了我一个小立方体(在 jupyter-notebook 中)和那个标志什么都没有。
def get_local_file(pdate, hour, path='/data/'):
"""Get date+hour processing file from local drive
:param pdate: str Processing date
:param hour: str Processing hour
:param path: str Path to file location
:return: Pandas DF Retrieved DataFrame
"""
sdate = pdate + '-' + str(hour)
for p_file in os.listdir(path):
if fnmatch.fnmatch(p_file, 'ABC_*'+sdate+'*.csv'):
return path+p_file
def get_files(pdate, path='/data/'):
hours = [time(i).strftime('%H') for i in range(24)]
fileList=[]
for hour in hours:
fileList.append(get_local_file(pdate, hour))
return fileList
end_datetime = datetime.combine(date.today(), time(0, 0, 0))
proc_datetime = end_datetime - timedelta(days=14)
while proc_datetime <= end_datetime:
proc_datetime += timedelta(days=1)
a = get_files(str(proc_datetime.date()).replace('-', '_'))
frame = pd.DataFrame()
list_ = []
for file_ in a:
if file_ != None:
df = pd.read_csv(file_,index_col=None, header=0, delimiter=';')
list_.append(df)
frame = pd.concat(list_)
我很确定可以使 while 循环及以下循环中的代码更简单,但不知道该怎么做。
【问题讨论】:
-
为什么不直接将 df 连接到框架中:frame=pd.concat(df)
-
@2Obe 向我返回此错误:第一个参数必须是可迭代的 pandas 对象,您传递了一个“DataFrame”类型的对象
-
那么文件名是否也包含日期。?还是应该根据上次修改时间来选择?
-
@VenkateshDurgumahanthi 每个 csv 文件的文件名中都有一个日期,当我运行它时,它需要选择过去 14 天的 csv 文件。当我阅读确切的一天时,一切都很好。我需要提一下,每天大约有 25-35 个 csv。可能是每天使用 csv 创建的子列表,这会导致问题。但我不确定为什么会这样。
-
我仍然不清楚这个问题。因此,您每天在特定文件夹中至少有 25 个文件。那么文件名是否也有日期和时间戳,或者你如何区分特定日期的文件?可以举个文件名的例子吗?
标签: python pandas csv dataframe concatenation