我必须按日期提取数据,并为每个不同的日期另存为单独的csv: “时间”以这种格式(2018-03-26T16:09:10.024101278Z)在CSV文件的一列中给出。
此数据集在不同的时间有超过10万行。 “我已尝试制作数据框”'''列名:(名称时间id ddr版本的读数)供参考''
dataset_CT= pd.read_csv("out_1.csv")
dataset_CT['Dates'] = pd.to_datetime(dataset_CT['time']).dt.date
dataset_CT['Time'] = pd.to_datetime(dataset_CT['time']).dt.time
dataset_CT.sort_values(by='Dates', axis=0, inplace=True)
dataset_CT.set_index(keys=['Dates'], drop=False,inplace=True)
Date_list=dataset_CT['Dates'].unique().tolist()
“像这样获得Date_list([datetime.date(2018,3,26),datetime.date(2018,3,31)])“
Date_set = dataset_CT.loc[dataset_CT.Dates=='(2018, 3, 26)']
我收到了如下所示的空数据框
name time id ddr version readings Dates Time
Dates
答案 0 :(得分:1)
如何按字符串比较?
Date_set = dataset_CT.loc[dataset_CT.Dates=='2018-03-26']
如果不起作用,请尝试更改Series.dt.date
:
dataset_CT['Dates'] = pd.to_datetime(dataset_CT['time']).dt.date
Date_set = dataset_CT.loc[dataset_CT.Dates=='2018-03-26']
到Series.dt.floor
无日期的日期时间:
dataset_CT['Dates'] = pd.to_datetime(dataset_CT['time']).dt.floor('d')
Date_set = dataset_CT.loc[dataset_CT.Dates=='2018-03-26']
答案 1 :(得分:1)
在阅读带有默认参数的输入时,我将假定您用逗号(,
)分隔符和一个标题行。此处不需要恕我直言的熊猫。一次读取一行文件并将其写入与日期相对应的csv文件中就足够了。
警告:将标头添加到每个输出CSV文件,并为每个新日期创建一个新的输出文件。具有自定义默认功能的collections.defaultdict
足以满足这两个要求。
以下代码读取名为"out_1.csv"
的输入csv文件,并将其内容写入一堆名为out_2018-03-26.csv
的文件中,日期是输出文件中所有行的日期:
with open("out_1.csv") as fdin:
def get_defaults():
"""returns a pair (csv_writer, file_object) for date dat initialized with header"""
filename = 'out{}.csv'.format(dat)
fd = open(filename, "w", newline='')
fd.write(header)
return (csv.writer(fd), fd)
outfiles = collections.defaultdict(get_defaults)
rd = csv.reader(fdin)
header = next(fdin) # store the header to later initialize output files
for row in rd:
dat = row[1][:10] # extract the date
wr = outfiles[dat][0]
wr.writerow(row) # and write the row to the appropriate output file
# close the output files
for i in outfiles:
outfile[i][1].close()
再三考虑之后,以上代码可能会保留太多打开的文件。这是一个改进的版本,仅在最近遇到的3个日期(经过测试)中保留打开的文件:
with open("out_1.csv") as fdin:
cache = collections.deque()
seen = set()
def get_defaults():
"""returns a pair (csv_writer, file_object) for date dat initialized with header"""
filename = 'out{}.csv'.format(dat)
fd = open(filename, 'a' if dat in seen else 'w', newline='')
if 0 == fd.tell(): # file is currently empty: write header
fd.write(header)
ret = (csv.writer(fd), fd)
cache.append(dat)
seen.add(dat)
if len(cache) > 3: # only keep 3 open files
old = cache.popleft()
print("Closing", old)
outfiles[old][1].close()
del outfiles[old]
return ret
outfiles = collections.defaultdict(get_defaults)
rd = csv.reader(fdin)
header = next(fdin) # store the header to later initialize output files
for row in rd:
dat = row[1][:10] # extract the date
wr = outfiles[dat][0]
wr.writerow(row) # and write the row to the appropriate output file
# close the currently opened output files
for i in outfiles:
outfiles[i][1].close()