Pandas 在线性时间内执行csv消毒

Pandas 在线性时间内执行csv消毒,pandas,performance,file-io,big-o,python-3.7,Pandas,Performance,File Io,Big O,Python 3.7,我用的是风速仪,它按以下顺序给我提供数据,其中两列合并成一列,我想排除一些无用的数据。 数据如下所示 "NO.","T&RH","DATA","UNIT","TIME" 1," 27�C 70.5%",0,"m/s","30-11-2020\15:33:34" 2," 27�C 70.5%",0,"m

我用的是风速仪,它按以下顺序给我提供数据,其中两列合并成一列,我想排除一些无用的数据。 数据如下所示

"NO.","T&RH","DATA","UNIT","TIME"
1," 27�C 70.5%",0,"m/s","30-11-2020\15:33:34"
2," 27�C 70.5%",0,"m/s","30-11-2020\15:33:35"
3," 27�C 70.5%",0,"m/s","30-11-2020\15:33:36"
4," 27�C 70.5%",0,"m/s","30-11-2020\15:33:37"
...
...
当我尝试将其加载到熊猫数据帧时,会出现各种奇怪的错误

我提出了以下代码来清理数据并将其导出为df

将熊猫作为pd导入
定义格式HTC(文本数据:列表)->pd.DataFrame:
数据=[]
对于原始数据中的l:
d=[]
l=l.split(“,”)
尝试:
_,t,h=l[1]。条带(“)。拆分(“”)
d、 附加(t.replace(“'C',”“))
d、 追加(h.replace(“%”,“”)
d、 追加(l[2])
d、 追加(l[-1]。带('\n'))
数据追加(d)
例外情况除外,如e:
通过
df=pd.DataFrame(data=data)
df.columns=['temp','relhum','data','time']
返回df
def gethtc(文件名:str)->pd.DataFrame:
text_data=open(文件名,“r”,encoding=“iso-8859-1”)。readlines()
返回格式HTC(文本数据)
df=gethtc(somefilename)
我的问题是,上面所示的操作是在线性时间内进行的,即,随着文件大小的增长,提取信息和获取数据帧所需的时间越长


如何提高效率?

您可以使用
pd.read_csv
来代替
DataFrame
构造函数。这里有很多选项(包括
编码
,以及
引擎
quotechar
,可能会有所帮助)。至少pandas会为您完成所有解析,并且可能具有更好的性能(特别是设置
engine=“c”
)。如果这对性能没有帮助,我不确定是否有更好的本机pandas选项:

df = pd.read_csv("htc.csv", engine="c")
df["TIME"] = pd.to_datetime(df.TIME.str.replace("\\", " "))
df["T&RH"] = df['T&RH'].str.replace("�", "")
输出:

   NO.        T&RH  DATA UNIT                TIME
0    1   27C 70.5%     0  m/s 2020-11-30 15:33:34
1    2   27C 70.5%     0  m/s 2020-11-30 15:33:35
2    3   27C 70.5%     0  m/s 2020-11-30 15:33:36
3    4   27C 70.5%     0  m/s 2020-11-30 15:33:37

当然,后处理是可选的,但我认为不会太慢。

@anon01数据通过设备附带的软件存储/记录到csv文件中。但是,我正在尝试提高后处理的效率,即修剪、拆分和从原始文件重新生成另一个df。我们不要反对考虑到
read
瓶颈。上述函数在性能方面是否能做得更好?肯定会分析代码我确实使用了
read\u csv
方法,并获得了如上所示的输出,同样是线性时间O(n)。只是想知道它是否能做得更好。不过谢谢你的回答。