大熊猫中大数据集的数据准备

时间:2017-06-21 21:42:16

标签: python pandas dataframe time-series

我想对我的数据进行简单的时间序列可视化,如下所示:

1;2;0;"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;";"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0";"11";13.10.2016 10:13:42 2;1;0;"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;";"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0";"1";13.10.2016 10:13:42

据我所知,传感器的数据存储在这两个充满0的字符串中(并非所有行都只包含0)。如何创建一个包含每个传感器日期列的数据框?或者是什么让我可以随时间绘制传感器数据(就像25和20个传感器一样)。

我尝试的是以下内容:

data = pd.read_csv('data.csv', delimiter=';') df = pd.concat([data[[0:3]], data[3].str.split(';', expand=True),data[4].str.split(';', expand=True), data[[-2,-1]]], axis=1)

然而,我花了很长时间才等待处理900,000行的结果......

1 个答案:

答案 0 :(得分:1)

我认为你可以使用参数quoting

import pandas as pd
import csv
from pandas.compat import StringIO

temp=u'''
1;2;0;"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;";"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0";"11";13.10.2016 10:13:42
2;1;0;"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;";"0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0";"1";13.10.2016 10:13:42
'''
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=";", quoting=csv.QUOTE_NONE, header=None)

#temporary diplay 52 columns
with pd.option_context('display.max_columns', 52):
    print (df)
   0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  \
0   1   2   0  "0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
1   2   1   0  "0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

   19  20  21  22  23  24  25  26  27 28  29  30  31  32  33  34  35  36  37  \
0   0   0   0   0   0   0   0   0   0  "  "0   0   0   0   0   0   0   0   0   
1   0   0   0   0   0   0   0   0   0  "  "0   0   0   0   0   0   0   0   0   

   38  39  40  41  42  43  44  45  46  47  48    49                   50  
0   0   0   0   0   0   0   0   0   0   0  0"  "11"  13.10.2016 10:13:42  
1   0   0   0   0   0   0   0   0   0   0  0"   "1"  13.10.2016 10:13:42 

然后applystrip

#data cleaning
cols = [3, 29, 48, 49]
df[cols] = df[cols].apply(lambda x: x.str.strip('"').astype(int))
#remove empty column
df = df.drop(28, axis=1)
#reset columns names
df.columns = pd.RangeIndex(len(df.columns))
with pd.option_context('display.max_columns', 52):
    print (df)
   0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  \
0   1   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
1   2   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

   19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  \
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

   38  39  40  41  42  43  44  45  46  47  48                   49  
0   0   0   0   0   0   0   0   0   0   0  11  13.10.2016 10:13:42  
1   0   0   0   0   0   0   0   0   0   0   1  13.10.2016 10:13:42