簡體   English   中英

Python Lineair 插值與 Pandas dataframe

[英]Python Lineair Interpolation with Pandas dataframe

嘗試使用 Python 中 Pandas 的“read_csv”function 對溫度傳感器進行上采樣和內插。

下面我的 function 用於上采樣和插值:

def upsampled(filename):
    parser = lambda date: pd.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
    series = pd.read_csv(filename, sep = ';', header=0, parse_dates=[0], index_col=0, 
    squeeze=True,date_parser=parser)
    upsampled = series.resample('1T')
    interpolated = upsampled.interpolate(method='linear')
    print(interpolated.head(100))
    interpolated.to_csv('test.csv',sep=';')

input.csv 文件中的部分內容與非連續采樣如下所示:

2020-03-04 04:49:08;327
2020-03-04 05:48:10;327
2020-03-04 05:58:10;327
2020-03-04 05:59:10;0
2020-03-04 06:11:10;9
2020-03-04 07:10:11;68
2020-03-04 08:09:12;127
2020-03-04 09:08:13;186
2020-03-04 10:07:14;246

連續采樣+插值的代碼中輸出文件(test.cvs)的濃度如下:

2020-03-04 05:46:00;326.82746249184606
2020-03-04 05:47:00;326.82713633398566
2020-03-04 05:48:00;326.82681017612526
2020-03-04 05:49:00;326.82648401826486
2020-03-04 05:50:00;326.8261578604044
2020-03-04 05:51:00;326.825831702544
2020-03-04 05:52:00;326.8255055446836
2020-03-04 05:53:00;326.8251793868232
2020-03-04 05:54:00;326.8248532289628
2020-03-04 05:55:00;326.8245270711024
2020-03-04 05:56:00;326.824200913242
2020-03-04 05:57:00;326.8238747553816
2020-03-04 05:58:00;326.8235485975212
2020-03-04 05:59:00;326.8232224396608
2020-03-04 06:00:00;326.8228962818004
2020-03-04 06:01:00;326.82257012394
2020-03-04 06:02:00;326.82224396607955
2020-03-04 06:03:00;326.82191780821915
2020-03-04 06:04:00;326.82159165035876
2020-03-04 06:05:00;326.82126549249836
2020-03-04 06:06:00;326.82093933463796
2020-03-04 06:07:00;326.82061317677756
2020-03-04 06:08:00;326.82028701891716
2020-03-04 06:09:00;326.81996086105676
2020-03-04 06:10:00;326.81963470319636
2020-03-04 06:11:00;326.81930854533596
2020-03-04 06:12:00;326.81898238747556
2020-03-04 06:13:00;326.81865622961516

我不明白的是:為什么在 2020-03-04 05:59:10 --> 2020-03-04 06:11:10 之間沒有插值? 在輸入文件中,數字從 0 變為 9。它甚至將原來的 0 和 9 擦掉,寫入了 326。

對於熟悉Pandas的人,我想請教一些幫助。 我對看起來非常簡單的東西沒有想法。

我明顯感覺到線性插值在文件的初始點和結束點之間進行插值。 您是否嘗試過其他插值方法,例如“時間”?

我的解決方案:

我首先以 1 秒的分辨率進行上采樣。 這里的插值似乎很完美。 例如,如果我的分辨率需要為一小時,我稍后會使用以下代碼將我的 1 秒分辨率列縮減為一小時:

def dataDownSampled(resultUpsampling1second,output):
    parser = lambda date: pd.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
    series = pd.read_csv(resultUpsampling1second, sep = ';', header=0, parse_dates 
    [0], index_col=0,squeeze=True,date_parser=parser)
    downsampled = series.resample('1H')
    mean = downsampled.mean()
    mean.to_csv(output+'.csv',sep=';')

這為我完成了工作。

我找到了解決方案:在您制作 Pandas dataframe 之前,您可以在其屬性中為列指定類型:

df = pd.DataFrame(x,columns =['StartTime',TagModel[0]['TagName'] ],dtype=float)

添加此屬性會將 dataframe 保留為 dataframe 並且不會將其轉換為系列。 結論:在開始使用 Pandas dataframe 之前定義列的數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM