代码之家  ›  专栏  ›  技术社区  ›  Souvik Ray

如何将多个数据帧合并为一个,并将其输出到熊猫中的csv文件?

  •  1
  • Souvik Ray  · 技术社区  · 6 年前

    我有一个csv文件,如下所示

    ,date,location,device,provider,cpu,mem,load,drops,id,latency,gw_latency,upload,download,sap_drops,sap_latency,alert_id
    0,2018-02-10 11:52:59.342269+00:00,CFE,10.0.100.1,BWE,6.0,23.0,11.75,0.0,,,,,,,,
    1,2018-02-10 11:53:04.006971+00:00,CDW,10.0.100.1,GRE,6.0,23.0,4.58,0.0,,,,,,,,
    2,2018-02-09 11:52:59.342269+00:00,,,SSD,,,10.45,,,,,,,,,
    3,2018-02-08 09:52:59.342269+00:00,,,BWE,,,12.45,,,,,,,,,
    4,2018-02-07 04:52:59.342269+00:00,,,RRW,,,9.45,,,,,,,,,
    5,2018-02-06 05:52:59.342269+00:00,,,GRE,,,5.45,,,,,,,,,
    6,2018-02-05 07:52:59.342269+00:00,,,SSD,,,13.45,,,,,,,,,
    7,2018-02-04 10:52:59.342269+00:00,,,SSD,,,8.15,,,,,,,,,
    8,2018-02-03 10:52:59.342269+00:00,,,GRE,,,4.15,,,,,,,,,
    9,2018-02-02 06:52:59.342269+00:00,,,RRW,,,13.15,,,,,,,,,
    10,2018-02-10 22:35:33.438948+00:00,QQW,10.12.11.1,VCD,4.0,23.0,5.0,0.0,,,,,,,,
    11,2018-02-10 22:35:37.905242+00:00,CSW,10.12.11.1,VCD,4.0,23.0,6.08,0.0,,,,,,,,
    .......................................................................................
    .......................................................................................
    

    我加载csv文件如下

    df = pd.read_csv("metrics_copy.csv", parse_dates=["date"])   
    df['device'] = df['device'].astype(str)
    unique_devices = (np.unique(df[['device']].values))
    unique_provider = np.unique(df[['provider']].values)
    

    我想得到一个csv文件,它只包含特定组合的特定列。

    for i in unique_devices:
        for j in ["cpu", "mem"]:
            df2 = df[(df['device'] == i)]
            df2["date"] = pd.to_datetime(df2["date"], format="%Y-%m-%d")
            print(df2[j])
    

    如您所见,对于设备和度量的每一个独特组合,我都会得到一个时间序列数据。 df2[j] 对于一个给定的设备,只要循环继续,我想将这些值输出到csv文件中。我知道一个名为pd.concat的概念,可以如下使用

    df_final = pd.concat([df, df2, df3.....])
    

    但为了实现这一点,我需要为所有可能的组合生成数据帧,然后最终将它们合并为一个数据帧。 cpu

    date cpu
    ...  ...
    ...  ...
    

    和另一个csv文件 mem 看起来像下面的样子

    date mem
    ...  ...
    ...  ...
    

    但我不确定我该如何做到这一点。有什么帮助吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   linamnt    6 年前

    在附加模式下使用df.to_csv()改编自以下内容: How to add pandas data to an existing csv file?

    for i in unique_devices:
        for j in ["cpu", "mem"]:
            df2 = df[(df['device'] == i)]
            df2["date"] = pd.to_datetime(df2["date"], format="%Y-%m-%d")
                df2[['date',j]].to_csv('{}.csv'.format(j), mode='a', index=False, header=False)
    

    或者,您可以使用一条if语句来检查文件是否存在,因此在第一次生成文件时,将使用头文件,然后忽略该头文件:

    for i in unique_devices:
        for j in ["cpu", "mem"]:
            df2 = df[(df['device'] == i)]
            df2["date"] = pd.to_datetime(df2["date"], format="%Y-%m-%d")
            import os
            if not os.path.isfile('{}.csv'.format(j)):
                df.to_csv('{}.csv'.format(j), mode='a', index=False)
            else:
                df2[['date',j]].to_csv('{}.csv'.format(j), mode='a', index=False, header=False)