gpt4 book ai didi

python - 使用Python填充缺失数据

转载 作者:行者123 更新时间:2023-12-01 08:00:33 25 4
gpt4 key购买 nike

我对 Python 不太熟悉,并且遇到了这样的问题。我有一个包含多个传感器数据的数据框。数据集中存在 NA 缺失值,需要按照以下规则进行填充。

  1. 如果下一个传感器有相同时间戳的数据,则使用下一个传感器数据填充。
  2. 如果附近传感器也没有数据,则用同一时间戳所有可用传感器的平均值填充。
  3. 如果所有传感器在同一时间戳丢失数据,则使用其自身的线性插值来填充丢失的值

这是我构建的示例数据。

import pandas as pd
sensor1 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[1,1,1,1,1,1,1,1,1,1],"value":[np.nan,2,2,2,2,np.nan,np.nan,np.nan,4,6]})
sensor2 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[2,2,2,2,2,2,2,2,2,2],"value":[3,4,5,6,7,np.nan,np.nan,np.nan,7,8]})
sensor3 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[3,3,3,3,3,3,3,3,3,3],"value":[2,3,4,5,6,7,np.nan,np.nan,7,8]})
sensordata = sensor1.append([sensor2,sensor3]).reset_index(drop = True)

如有任何帮助,我们将不胜感激。

根据Christian的回答,解决方案如下。

# create  data
df1 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[1,1,1,1,1,1,1,1,1,1],"value":[np.nan,2,2,2,2,np.nan,np.nan,np.nan,4,6]})
df2 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[2,2,2,2,2,2,2,2,2,2],"value":[3,4,5,6,7,np.nan,np.nan,np.nan,7,8]})
df3 = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor":[3,3,3,3,3,3,3,3,3,3],"value":[2,3,4,5,6,7,np.nan,np.nan,7,8]})
df = df1.append([df2,df3]).reset_index(drop = True)

# pivot dataframe
df = df.pivot(index = 'date', columns ='sensor',values ='value')

# step 1, using specified sensor to fill missing values first, here use sensor 3
for c in df.columns:
selectedsensor = 3
df[c] = df[c].fillna(df[selectedsensor])

# step 2, use average of all available sensors to fill
df = df.transpose().fillna(df.transpose().mean()).transpose()

# step 3, use interpolate to fill remaining missing values
df = df.interpolate()

# unstack back to the original data format
df = df.reset_index()
df = df.melt(id_vars=['date'],var_name = 'sensor')
#df = df.unstack('sensor').reset_index()
#df = df.rename(columns ={0:'value'})

最终输出如下:

         date sensor  value
0 2000-01-01 1 2.0
1 2000-01-02 1 2.0
2 2000-01-03 1 2.0
3 2000-01-04 1 2.0
4 2000-01-05 1 2.0
5 2000-01-06 1 7.0
6 2000-01-07 1 6.0
7 2000-01-08 1 5.0
8 2000-01-09 1 4.0
9 2000-01-10 1 6.0
10 2000-01-01 2 3.0
11 2000-01-02 2 4.0
12 2000-01-03 2 5.0
13 2000-01-04 2 6.0
14 2000-01-05 2 7.0
15 2000-01-06 2 7.0
16 2000-01-07 2 7.0
17 2000-01-08 2 7.0
18 2000-01-09 2 7.0
19 2000-01-10 2 8.0
20 2000-01-01 3 2.0
21 2000-01-02 3 3.0
22 2000-01-03 3 4.0
23 2000-01-04 3 5.0
24 2000-01-05 3 6.0
25 2000-01-06 3 7.0
26 2000-01-07 3 7.0
27 2000-01-08 3 7.0
28 2000-01-09 3 7.0
29 2000-01-10 3 8.0

最佳答案

您可以执行以下操作:

您的数据集,已旋转:

df = pd.DataFrame({"date": pd.date_range('1/1/2000', periods=10),"sensor1":[np.nan,2,2,2,2,np.nan,np.nan,np.nan,4,6], "sensor2":[3,4,5,6,7,np.nan,np.nan,np.nan,7,8], "sensor3":[2,3,4,5,6,7,np.nan,np.nan,7,8]}).set_index('date')

1) 这是带有向后选项的 fillna,并且沿轴 1 的 limit = 1

df.fillna(method='bfill',limit=1,axis=1)

2) 这是沿着轴 1 均值的 fillna。显然这并没有真正实现,但我们可以通过转置来欺骗它:

df.transpose().fillna(df.transpose().mean()).transpose()

3)这只是插值

df.interpolate()

奖金:

这有点难看,因为我必须逐列应用,但这里选择传感器 3 来填充:

for c in df.columns:
df[c] = df[c].fillna(df["sensor3"])
df

关于python - 使用Python填充缺失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55751851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com