将具有公共索引的csv列连接到一个df中

时间:2017-02-02 19:54:15

标签: python csv pandas

我有各种具有相同列的csv文件,并且需要将数据连接到一个dataframe / csv中,索引为1-24。然后,每个csv文件的名称将成为其相关列的名称。例如:

one.csv                 two.csv
Time  hour energy     Time  hour energy     
00:59   1    0        00:59   1    0  
01:59   2    3        01:59   2    5
02:59   3    2        02:59   3    8
...                   ...
23:59   24   6        23:59  24    3

Combined.csv
hour  one  two
1       0   0
2       3   5
3       2   8
...
24      6   3

我见过的最接近的是:

path = r'C:\files'
all_files = glob.glob(os.path.join(path, "*.csv"))   
df_from_each_file = (pd.read_csv(f) for f in all_files)
concatenated_df   = pd.concat(df_from_each_file, ignore_index=True)

但它不太正确,因为它增加了行而不是列。

1 个答案:

答案 0 :(得分:1)

您应该使用pd.concat(..., axis=1)参数来水平连接DF:

import os
import glob
import pandas as pd

In [46]: files = glob.glob(r'D:\temp\.data\42011160\*.csv')

In [47]: pd.concat([pd.read_csv(f, usecols=['hour', 'energy'], index_col='hour')
    ...:              .rename(columns=lambda x: os.path.basename(os.path.splitext(f)[0]))
    ...:            for f in files],
    ...:           axis=1).reset_index()
    ...:
Out[47]:
   hour  1  2
0     1  0  0
1     2  3  5
2     3  2  8
3    24  6  3

其中:

In [48]: files
Out[48]: ['D:\\temp\\.data\\42011160\\1.csv', 'D:\\temp\\.data\\42011160\\2.csv']