如何用python处理丢失的数据

问题描述 投票:2回答:3

我有一组数据存储在txt文件中,如下所示。

Elevation(ROAD)       Interval    
1.3                    1
3.3                    2
4.1                    3
-1.5                   4
NA                     5
NA                     6
6.8                    7
2.1                    8
5.1                    9
NA                     10
6.1                    11
NA                     12
NA                     13
NA                     14

有没有什么方法可以用python来插值这些缺失的数据(NA)?

python interpolation missing-data
3个回答
2
投票

你没有提供太多细节。你也没有显示代码。

一个简单的方法,得到你想要的是创建一个 pandas.Series() 您所应用的 interpolate 函数(如果您需要特定的插值设置,请在谷歌上搜索它;它们可能会略有不同,具体取决于 pandas 您正在使用的版本)。)

(我的理解是,您的 间隔 列是一个简单的数据框架索引)。)

import pandas as pd
import numpy as np
data = [1.3, 3.3, 4.1 -1.5, np.nan , np.nan , 6.8, 2.1, 5.1, np.nan, 6.1, np.nan , np.nan , np.nan]
ser = pd.Series(data)
ser.interpolate()

2
投票

假设你的 pandas 数据框 df

df['Elevation'].fillna((df['Elevation'].mean()), inplace=True)

试试这个


1
投票

如果在任何情况下,你不能使用外部库。

file_content = """1.3
3.3
4.1
-1.5
NA
NA
6.8
2.1
5.1
NA
6.1
NA
NA
NA
7.1
NA"""

def isfloat(value):
  try:
    float(value)
    return True
  except ValueError:
    return False

class ParsedList:
  def __init__(self):
    self.list = []
    self.holes = {} # index key, value length

  def set_value(self, number):
    if isfloat(number):
      self.list.append(float(number))
    else:
      key = len(self.list)-1
      if key in self.holes:
        self.holes[key] += 1
      else:
        self.holes[key] = 1

  def interpolate(self):
    output = list(self.list)
    offset=0

    for index, size in self.holes.items():
      if index < len(self.list)-1:
        delta = (self.list[index+1] - self.list[index])/(size+1)
        init_value = self.list[index]
      else:
        delta =0
        init_value = self.list[-1]
      for i in range(size):
        output.insert(index+i+1+offset, init_value+delta*(i+1))
      offset+=size
    return output

# test:
parsed_list = ParsedList() 
for x in file_content.splitlines():
  parsed_list.set_value(x)

[print(x) for x in parsed_list.interpolate()]
© www.soinside.com 2019 - 2024. All rights reserved.