【发布时间】:2019-02-05 18:18:12
【问题描述】:
在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 列的数据框。
所以看起来我执行的这个附加功能缺乏持久性,我需要让它持久化。我尝试将“inplace=True”arg 插入到 append 函数本身(引发错误)以及在它之后(没有区别)。
如果有人能告诉我如何使这个附加列永久化,我将非常感激!
【问题讨论】:
-
您的
file_name列正在被删除,因为它没有数字 dtype。见这里:stackoverflow.com/a/34270422/8146556 -
感谢您的指点,@rahlf23;现在我知道为什么它不起作用了。但是我想知道如何将文件名(必要的字符串)转换为数字数据类型?
-
您为什么对保留文件名感兴趣?您正在取数据的平均值,因此它无关紧要。
-
我需要保留文件名,这样我就可以分辨出数据来自 300 个不同的土壤传感器中的哪一个。然后我从 1/4 小时到每小时间隔进行下采样,以便我可以将来自土壤传感器的数据与每小时记录的当地天气数据相关联。
-
所以您需要按传感器分组然后重新采样?换句话说,您只想通过传感器单独取平均值?
标签: python pandas dataframe append time-series