我想对我的数据进行简单的时间序列可视化,如下所示:
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行的结果......
答案 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
然后apply
与strip
:
#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