首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas Dataframe Append函数不持久

Pandas Dataframe Append函数不持久
EN

Stack Overflow用户
提问于 2018-08-31 02:19:32
回答 1查看 327关注 0票数 1

遵循this Q&A,我已经成功地将几个CSV文件连接到一个时间序列数据帧中,添加一个列来添加每个记录所来自的CSV文件的名称,如下所示:

代码语言:javascript
复制
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分钟间隔降为小时平均值时,如下所示:

代码语言:javascript
复制
df_h = df.resample('H').mean()
df_h.shape

我得到一个数据帧,它的形状只有4列。

因此,我执行的这个append函数似乎缺乏持久性,我需要让它持久。我已经尝试将"inplace=True“参数插入到append函数本身(抛出错误)和之后(没有区别)。

如果有人能告诉我如何使这个附加的专栏永久存在,我将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 02:57:42

正在删除您的file_name列,因为它没有数字dtype。更不用说,因为您是通过mean()有效地聚合数据帧,所以您不应该对保留原始数据源的file_name感兴趣。在连接的数据帧中取平均值后,该信息将变得毫无意义。

我建议用pd.concat()代替df.append()。给定两个示例csv文件:

sample1.csv

代码语言:javascript
复制
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.34

sample2.csv

代码语言:javascript
复制
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

您可以执行以下操作:

代码语言:javascript
复制
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()

这就给出了:

代码语言:javascript
复制
                                  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.545000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52103193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档