使用Python / Pandas从大型csv文件获取相关矩阵时出现问题

时间:2019-02-15 13:01:10

标签: python pandas csv dataframe correlation

首先:我是python和数据分析的初学者,但我确信我对这些概念已经足够了解,因此您不必过度简化答案。

我的挑战是我必须分析大量的机器数据(两年内的时间序列; 24个结构相同的csv文件,每个文件有170列,〜250万行,〜2.6gb大小)。

必须对相关性进行分析。最初期望的输出是170x170相关矩阵。进一步的分析(滞后,不对称相关矩阵输入x输出)应推迟到下一步,并且主要不考虑您的答案。

我已经能够将一个文件读入数据帧(使用Spyder的IPython控制台;这要花很多16gb内存)。

import pandas as pd

df = pd.read_csv(r"C:\MyFilePath\...\TestData.csv", sep=';', encoding='iso-8859-1')

In[]: len(df.columns)
Out[]: 170

In[]: len(df)
Out[]: 2678401

但是从那以后我被困住了...

pandas.DataFrame.corr方法无法正常工作,并且仅返回(如果可行)具有很多NaN值的10 x 10矩阵(据我理解,这只是显示不存在的皮尔逊相关性(关闭)等于或等于零))。

我发现了一些描述如何将数据加载到我的数据帧中,这超出了我的RAM。但是我无法完全理解加载块的概念,尤其是与时间序列结合使用时。

如果您能为我提供适当的提示或摘要,以便我可以解决此问题,我将不胜感激。

理想的结果是,我可以在所有csv文件上运行并获得所有参数所需的相关矩阵。

注意: 我不受熊猫的约束。如果您建议另一个可以更好地解决此问题的库,我们很高兴听到您的解决方案。 但是由于我公司的安全政策,我不得不不下载任何其他软件(或更确切地说:这很复杂...) 我手头唯一的其他选择是MATLAB R2018.a

1 个答案:

答案 0 :(得分:0)

Pandas df.corr给出一个相关矩阵NxN,其中N是列数。我用200列进行了尝试,并且可以正常工作。

最可能的原因是您的数据不干净。如果pandas找到关联操作不可接受的数据点,则它将排除该列。尝试在其中一个字段中创建仅包含数字和仅一个字符串的数据框,您将明白我的意思。

如果数据状态不佳,它将解释为什么还有那么多的nan。 我认为您必须对数据进行一些清理和预处理。