大Pandas大数据集的数据准备

2024-03-29 06:49:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

然而,这需要很长时间,我没有等待处理900000行的结果。。。你知道吗


Tags: csv数据方法字符串truedata可视化时间
1条回答
网友
1楼 · 发布于 2024-03-29 06:49:24

我认为可以使用参数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^{}

#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

相关问题 更多 >