【问题标题】:Combining CSV Files with different column data on one column将 CSV 文件与一列上的不同列数据组合
【发布时间】:2019-07-09 14:52:41
【问题描述】:

一个样本数据集的结构如下

  • Home_HeatSensor_AA.CSV
  • Office_HeatSensor_BB.CSV
  • Ship_ElevationSensor_XXYY.CSV

AA.CSV 具有以下列,带有示例行

   Time  AA  AB  BB  Site  Type
0  1:00   5   4   5  Home  Heat

BB.CSV 格式类似

   Time  AA  AB  BB    Site  Type
0  1:00   6   2   4  Office  Heat

但是,XXYY.CSV 的格式大不相同

   Time     XX       XY     YY  Site       Type
0  1:00  1.332  12.1123  4.212  Ship  Elevation

我需要将这三个 CSV 文件合并成一个主 CSV 文件,格式如下

   Time AA AB AB     XX       XY     YY    Site       Type
0  1:00  5  4  4                           Home       Heat
0  1:00  6  2  2                         Office       Heat
0  1:00           1.332  12.1123  4.212    Ship  Elevation

我曾尝试过使用 pandas,但结果好坏参半。下面的代码将加入数据,但会切换时间、站点和单元的列顺序。理想情况下,我希望这两个保持不变,时间在订单前面,站点和单位保持最后两列值

for filename in filepaths:
 df = pd.read_csv(filename, index_col=None, header=0, parse_dates=True,infer_datetime_format=True)
 li.append(df)

【问题讨论】:

    标签: python pandas csv dataframe


    【解决方案1】:

    pd.concat

    def read_csv(fn):
        return pd.read_csv(fn, skipinitialspace=True)
    
    files = ['Home_HeatSensor_AA.CSV', 'BB.CSV', 'XXYY.CSV']
    cols = ['Time', 'AA', 'AB', 'BB', 'XX', 'XY', 'YY', 'Site', 'Type']
    
    pd.concat(map(read_csv, files), sort=False)[cols].to_csv('MASTER.CSV', index=False)
    

    然后确认

    cat MASTER.CSV
    
    Time,AA,AB,BB,XX,XY,YY,Site,Type
    1:00,5.0,4.0,5.0,,,,Home,Heat
    1:00,6.0,2.0,4.0,,,,Office,Heat
    1:00,,,,1.3319999999999999,12.1123,4.212,Ship,Elevation
    

    如果您不知道高级的列名:

    def read_csv(fn):
        return pd.read_csv(fn, skipinitialspace=True)
    
    files = ['Home_HeatSensor_AA.CSV', 'BB.CSV', 'XXYY.CSV']
    
    pd.concat(map(read_csv, files), sort=False).to_csv('MASTER.CSV', index=False)
    

    【讨论】:

    • 这是一个很好的答案,但我不会提前知道列名。用户可以上传带有一组新列名的新文件,代码需要考虑这一点
    • 如果没有列名,pandas 会按某种顺序放置列。我使用列名按照您指定的顺序显示结果。如果您不知道列名,请忽略它。
    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多