繁体   English   中英

使用 pandas 通过可变列读取 csv 文件

[英]Read csv file by changeable columns using pandas

我正在开发一个软件,它可以读取 csv 文件并为每一列创建一个列表。 在我的程序中,我将DataTime这个数据使用 X 坐标上的 DataTime 和S1;S2;S3...作为 Y 坐标

我的 csv 文件:

DateTime;S1;S2;S3
2020-07-16 15:11:34.358231;677.0552427707063;787.6245155900142;543.0755073183745
2020-07-16 15:11:34.360247;535.4790551706492;317.65859520197984;218.64223032216418
2020-07-16 15:11:34.362263;451.9436928722545;449.5560971162404;215.33038976545765
2020-07-16 15:11:34.364279;72.31352267938303;251.55939892326035;896.9233907560412
2020-07-16 15:11:34.366295;758.7365312885398;686.7909954314093;303.9852170969752
2020-07-16 15:11:34.368311;593.8244329562257;698.5981983561348;369.11408762777785
2020-07-16 15:11:34.370327;338.56552989499176;469.327619765774;331.0295457896333
2020-07-16 15:11:34.372343;729.3276090259968;690.776181594403;97.6830657885398
2020-07-16 15:11:34.374359;284.58252864976197;569.0028638781417;196.02767689983673
2020-07-16 15:11:34.376375;909.5920826056772;178.28447193362686;240.4015082916274

我想按列读取文件,但这个文件可以更改列数,因为信号是变量。 例如我可以有S1;S2;S3;S4;S5...

所以我希望能够独立阅读我有多少列。 DateTime列是标准的,因此我可以阅读 1 次。

这是我的实际代码:

import pandas as pd
from datetime import datetime
from csv import reader

class Read_csv:
    
    def csv_reader(self, file_name):
    
        with open(file_name, 'r') as read_obj:
            csv_reader = reader(read_obj)
            csv_header = next(csv_reader)
            
        df = pd.read_csv(file_name, delimiter = ';')
        self.datetime_array = list(map(lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f'), df["DateTime"]))
        
        for i in range((len(csv_header)-1)):
            #TODO:read signals columns
            

我更新的代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

class Read_csv:
    
    def csv_reader(self, file_name):
        

        df = pd.read_csv(file_name, delimiter = ';', parse_dates=['DateTime']).set_index('DateTime')
        
        df.plot()
        sns.lineplot(data=df)
        
        plt.savefig("Signals_Chart.png")

这是我的双图例结果: 在此处输入图像描述

  • 最好的办法是了解如何集成 pandas 和 matplotlib 以使数据操作和绘图更容易。
  • Pandas:可视化
import pandas as pd
import numpy as np  # for test data
import string  # for test data
from datetime import datetime  # for test data
import seaborn as sns
import matplotlib.pyplot as plt

# plt styling parameters
plt.style.use('seaborn')
plt.rcParams['figure.figsize'] = (16.0, 10.0)
plt.rcParams["patch.force_edgecolor"] = True

# test data with 26 columns and a date column as index
np.random.seed(365)
cols = list(string.ascii_uppercase)
length = 10
df = pd.DataFrame(np.random.rand(length, 26) * 1000, columns=cols, index=pd.bdate_range(datetime.today(), freq='d', periods=length).tolist())

# using pandas.DataFrame.plot
df.plot()
plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left", borderaxespad=0)

在此处输入图像描述

使用 seaborn

sns.lineplot(data=df, dashes=False)
plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left", borderaxespad=0)

在此处输入图像描述

将您的样本数据放在名为test.csv的文件中

# read in the file
df = pd.read_csv('test.csv', delimiter = ';', parse_dates=['DateTime']).set_index('DateTime')

# plot the file
sns.lineplot(data=df)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM