从导入的csvs

时间:2016-06-22 13:16:20

标签: csv pandas merge concat

我看到过类似的问题被问到并回复了。但是,似乎没有答案可以解决我的具体需求。

以下代码,我根据自己的需要进行了调整,成功导入了文件和相关列。但是它会将行附加到df上,并且不会根据键合并这些列。

import glob
import pandas as pd
import os

path = r'./csv_weather_data'               
all_files = glob.glob(os.path.join(path, "*.csv")) 
df = pd.concat(pd.read_csv(f, skiprows=47, skipinitialspace=True, usecols=['Year','Month','Day','Hour','DBT'],) for f in all_files)

典型的数据结构如下:

Year     Month     Day     Hour     DBT
1989     1         1       0        7.8
1989     1         1       100      8.6
1989     1         1       200      9.2

我想实现以下目标:

  1. 将文件夹中包含的所有csv文件导入pandas df

  2. 将前4列合并为1列日期时间值

  3. 合并所有导入的csv,使用新创建的日期时间值作为索引,并将DBT列添加到其中,每个DBT列采用导入的csv的名称(它是该天气文件的干燥灯泡温度DBT) )。

  4. 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您应该分两步分解问题:

首先,定义导入功能。在这里,您需要定义datetime并将set设置为索引。

def my_import(f):

    df = pd.read_csv(f, skiprows=47, skipinitialspace=True, usecols=['Year','Month','Day','Hour','DBT'],)

    df.loc[:, 'Date'] = pd.to_datetime(df.apply(lambda x : str(int(x['Year']))+str(int(x['Month']))+str(int(x['Day']))+str(int(x['Hour'])), axis = 1), format = '%Y%m%d%H')
    df.drop(['Year', 'Month', 'Day', 'Hour'], axis = 1, inplace = True)
    df.set_index('Date')
    return df

然后按列连接(axis = 1)

df = pd.concat({f : my_import(f) for f in all_files}, axis = 1)