如何使用 Pandas 指定和定位单元格并使用 fillna

How to specify and locate cells using Pandas and use fillna

我正在使用可以在 Kaggle 网站 (https://www.kaggle.com/claytonmiller/lbnl-automated-fault-detection-for-buildings-data) 上找到的数据集。 我正在尝试 编写一个代码,该代码可以根据时间戳指定以查找那些特定的行并应用条件 (在此数据集的上下文中,从 10:01 PM 到6:59 AM) 和 f 用零 .

填充与这些特定行对应的所有列

我试过以下代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)

%matplotlib inline
df = pd.read_csv('RTU.csv')

def fill_na(row):
    if dt.time(22, 1) <= pd.to_datetime(row['Timestamp']).time() <= dt.time(6, 59):
        row.fillna(0)
        
### df = df.apply(fill_na, axis=1) ###
df= df.apply(lambda row : fill_na(row), axis=1)
#### df.fillna(0, inplace=True) ###
df.head(2000)

然而,在更改数据集的轴后,它似乎无法再按预期工作。

我不认为你需要一个函数来做到这一点。只需使用条件过滤行,然后填写。

import datetime as dt
import pandas as pd

df = pd.read_csv('RTU.csv',parse_dates=['Timestamp'])
df.head()

cond = (df.Timestamp.dt.time > dt.time(22,0)) | ((df.Timestamp.dt.time < dt.time(7,0)))
df[cond] = df[cond].fillna(0,axis=1)

表示早上7点前的na填0