我看到过类似的问题被问到并回复了。但是,似乎没有答案可以解决我的具体需求。
以下代码,我根据自己的需要进行了调整,成功导入了文件和相关列。但是它会将行附加到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
我想实现以下目标:
将文件夹中包含的所有csv文件导入pandas df
将前4列合并为1列日期时间值
合并所有导入的csv,使用新创建的日期时间值作为索引,并将DBT列添加到其中,每个DBT列采用导入的csv的名称(它是该天气文件的干燥灯泡温度DBT) )。
有什么建议吗?
答案 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)