我当前的代码如下:
import pandas as pd
import csv
import matplotlib.pyplot as plt
def data_reader(filename, rowname):
with open(filename, newline='') as fp:
yield from (row[1:] for row in csv.reader(fp, skipinitialspace=True)
if row[0] == rowname)
File = 'data.csv'
ASA = pd.DataFrame.from_records(data_reader(File, 'ASA'))
GDS = pd.DataFrame.from_records(data_reader(File, 'GDS'))
SCD = pd.DataFrame.from_records(data_reader(File, 'SCD'))
ASF = pd.DataFrame.from_records(data_reader(File, 'ASF'))
ADC = pd.DataFrame.from_records(data_reader(File, 'ADC'))
DFS = pd.DataFrame.from_records(data_reader(File, 'DFS'))
DCS = pd.DataFrame.from_records(data_reader(File, 'DCS'))
DFDS = pd.DataFrame.from_records(data_reader(File, 'DFDS'))
它读取的数据如下所示:
^{pr2}$我试图写一个IF语句,它看起来像这样:
pd.DataFrame.from_records(data_reader(
if rowname = 'ASA'
ASA.append(row)
elif rowname = 'GDS'
GDS.append(row)
等等。这样会更快吗?目前运行我的代码并绘制一个图表需要大约1分钟。我相信当我有10-15个情节要做时,时间会更长。我试过用不同的方法来写if/elseif语句,但我没有这样做的运气。在
从磁盘读取是这里的瓶颈,所以我们应该尽量避免多次读取文件。如果您有足够的内存将整个CSV解析为一个列表dict,那么您可以使用
循环
^{pr2}$将CSV加载到dict,}。dict值是列表的列表。
dfs
。dict键是类似'ASA'
的字符串,'GDS'
和{另一个回路
将列表列表转换为数据帧。
if-statement
:如果该行以
columns
开头(大写或不大写),则在columns
dict中记录该行,否则将该行记录在dfs
dict中稍后在
for-loop
中:key
是字符串,例如'ASA'
。对于每个键,列数为 通过找到dfs[key]
中行的最大长度获得。columns[key]
返回key
对应的图例行。columns[key][-num_cols:]
返回该行中最后一个num_cols
值。data_reader
返回的结果是数据帧的dict:你应该可以这样做:
相关问题 更多 >
编程相关推荐