我有各种具有相同列的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)
但它不太正确,因为它增加了行而不是列。
答案 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']