适用于读取,但不会更改文件中的值:
import csv
directory="C:\\Users\\pyth\\output_3.csv"
with open(directory, 'r+') as f:
d_reader = csv.DictReader(f,delimiter='\t')
for row in d_reader:
if float(row['Open']) > float(row['Close']):
row['CLINE_TYPE'] = '1_MIN'
else : row["CLINE_TYPE"] = '1_MAX'
如何在 Pandas 中编写嵌套分支语句?
目的:找出相差 5 分钟的行,前提是第一行打开 > 关闭,第二行打开 < 关闭或第一行打开 < 关闭,第二行打开 > 关闭。
现实生活中的例子:去年哪两天昨天早上的温度高于昨天晚上的温度,第二天晚上的温度又高于第二天早上的温度,反之亦然。
逻辑:从输入数据中,需要选择满足以下条件的一对行: 1)“OPEN TIME”字段中的行之间相差5分钟(即一行中的下一行) ) 2) 如果在第一行中“OPEN”字段中的值严格大于“Close”字段中的值,则在第二行中,OPEN 严格小于 CLOSE,反之亦然。如果满足条件,则在“CLOSE”>“OPEN”的情况下将时间值写入date_cline_up变量,在“CLOSE”<“OPEN”的情况下写入date_cline_dow,并写入文件。接下来,循环查找满足条件的第二对字符串。如果不满足条件,则 date_cline_up 或 date_cline_dow 的值在 Nan 中被覆盖,具体取决于哪一行是该对中的第一个或随后的每个对中的哪一行。从输入数据中,获得满足条件的以下行:第 0-1 行将包含字段 CLINE_TYPE -'1_MAX' 中的铭文,第 2-3 行将包含 1_MAX。“完整条件”中的代码完全涵盖了所描述的逻辑。
输入数据 :
Open Time Close time Open Close STATUS CLINE_TYPE
0 2021-11-06 13:25:00 2021-11-06 13:29:59.999000064 60534.13 60509.9
1 2021-11-06 13:30:00 2021-11-06 13:34:59.999000064 60509.89 60570.01
2 2021-11-06 13:35:00 2021-11-06 13:39:59.999000064 60570.01 60469.34
3 2021-11-06 13:40:00 2021-11-06 13:44:59.999000064 60469.34 60546.6
满状态:
date_cline_up=None
date_cline_dow=None
for row in d_reader:
curent_date = datetime.strptime(row["Open Time"], '%Y-%m-%d %H:%M:%S')
if date_cline_up is None and date_cline_dow is None:
if float(row["Open"]) > float(row["Close"]):
date_cline_dow = datetime.strptime(row["Open Time"], '%Y-%m-%d %H:%M:%S')
elif float(row["Open"]) < float(row["Close"]):
date_cline_up = datetime.strptime(row["Open Time"], '%Y-%m-%d %H:%M:%S')
elif date_cline_up is None and date_cline_dow is not None:
if (((curent_date - date_cline_dow).total_seconds()) % 3600 // 60) == 5 and float(row["Open"]) < float(row["Close"]):
row["CLINE_TYPE"] = '1_MIN'
else:
date_cline_dow = None
elif date_cline_up is not None and date_cline_dow is None:
if (((curent_date - date_cline_up).total_seconds()) % 3600 // 60) == 5 and float(row["Open"]) > float(row["Close"]):
row["CLINE_TYPE"] = '1_MAX'
else:
date_cline_up = None
如果我正确理解了这个问题...
首先,让我们从“下一个”行添加具有值的辅助列:
发生了:
现在您可以过滤: