遵循this Q&A,我已经成功地将几个CSV文件连接到一个时间序列数据帧中,添加一个列来添加每个记录所来自的CSV文件的名称,如下所示:
import os
import glob
import pandas as pd
path = ''
all_files = glob.glob(os.path.join(path, "*.csv"))
names = [os.path.basename(x) for x in glob.glob(path+'\*.csv')]
df = pd.DataFrame()
for file_ in all_files:
file_df = pd.read_csv(file_, sep=',', parse_dates=["capture_datetime_utc"], index_col="capture_datetime_utc")
file_df['file_name'] = file_
df = df.append(file_df)
df.shape这似乎工作得很好,而且-正如您在this Jupyter Notebook -i中看到的那样,获取一个形状为5列的数据帧。
但是当我将这个时间序列df从15分钟间隔降为小时平均值时,如下所示:
df_h = df.resample('H').mean()
df_h.shape我得到一个数据帧,它的形状只有4列。
因此,我执行的这个append函数似乎缺乏持久性,我需要让它持久。我已经尝试将"inplace=True“参数插入到append函数本身(抛出错误)和之后(没有区别)。
如果有人能告诉我如何使这个附加的专栏永久存在,我将不胜感激!
发布于 2018-08-31 02:57:42
正在删除您的file_name列,因为它没有数字dtype。更不用说,因为您是通过mean()有效地聚合数据帧,所以您不应该对保留原始数据源的file_name感兴趣。在连接的数据帧中取平均值后,该信息将变得毫无意义。
我建议用pd.concat()代替df.append()。给定两个示例csv文件:
sample1.csv
capture_datetime_utc,fertilizer_level,light,soil_moisture_present,air_temperature_celsius
2018-07-30 17:34:33,-1.0,1.28,12.13,26.42
2018-07-30 17:49:33,-1.0,1.26,11.87,26.51
2018-07-30 18:04:33,-1.0,1.26,11.47,26.37
2018-07-30 18:19:33,-1.0,1.17,12.00,26.28
2018-07-30 18:34:33,-1.0,0.94,11.47,25.34sample2.csv
capture_datetime_utc,fertilizer_level,light,soil_moisture_present,air_temperature_celsius
2018-08-28 07:50:23,-1.0,40.73,6.53,31.82
2018-08-28 08:05:23,-1.0,47.13,6.65,33.65
2018-08-28 08:20:23,-1.0,51.94,6.65,35.00
2018-08-28 08:35:23,-1.0,57.46,6.65,36.55
2018-08-28 08:50:23,-1.0,14.17,6.77,32.98您可以执行以下操作:
all_files = ['sample1.csv','sample2.csv']
df = pd.concat([pd.read_csv(file_, sep=',', parse_dates=["capture_datetime_utc"], index_col="capture_datetime_utc") for file_ in all_files], keys=all_files)
df = df.reset_index().set_index('capture_datetime_utc').groupby('level_0').resample('H').mean().dropna()这就给出了:
fertilizer_level light \
level_0 capture_datetime_utc
sample1.csv 2018-07-30 17:00:00 -1.0 1.270000
2018-07-30 18:00:00 -1.0 1.123333
sample2.csv 2018-08-28 07:00:00 -1.0 40.730000
2018-08-28 08:00:00 -1.0 42.675000
soil_moisture_present \
level_0 capture_datetime_utc
sample1.csv 2018-07-30 17:00:00 12.000000
2018-07-30 18:00:00 11.646667
sample2.csv 2018-08-28 07:00:00 6.530000
2018-08-28 08:00:00 6.680000
air_temperature_celsius
level_0 capture_datetime_utc
sample1.csv 2018-07-30 17:00:00 26.465000
2018-07-30 18:00:00 25.996667
sample2.csv 2018-08-28 07:00:00 31.820000
2018-08-28 08:00:00 34.545000https://stackoverflow.com/questions/52103193
复制相似问题