我需要编写一个脚本来读取所有具有特定名称的csv文件,这些文件来自过去14天(每天早上),但是当我做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循环和下面的代码更简单,但不知道如何操作。
答案 0 :(得分:1)
如果您想从一堆.csv
文件创建单个数据框,可以这样做:
我没有检查您对日期和文件名的处理是否正确,但以下是有关连接部分的代码的相关更改:
end_datetime = datetime.combine(date.today(), time(0, 0, 0))
proc_datetime = end_datetime - timedelta(days=14)
list_ = []
while proc_datetime <= end_datetime:
proc_datetime += timedelta(days=1)
a = get_files(str(proc_datetime.date()).replace('-', '_'))
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_)
答案 1 :(得分:1)
import pandas
import glob
csvFiles = glob.glob(path + "/data/*.csv")
list_ = []
for file in csvFiles:
if ((datetime.combine(date.today(), time(0, 0, 0)) - datetime(*map(int, file.split("-")[1].split("_")))).days < 14)
df = pandas.read_csv(file, index_col=None, header=0, delimiter=';')
list_.append(df_f)
frame = pandas.concat(list_, ignore_index=True)
frame.to_csv("Appended File.csv")
假设文件路径中没有任何连字符( - )字符。