このようなパンダのデータフレームがあります:
date_time var1 var2 var3 var4 var6
20080322 0000 0 0 0 0 -11
20080322 0001 0 5 0 0 9
20080322 0003 5 0 0 0 0
20080322 0004 0 0 11 0 -9
20080322 0005 0 12 0 0 1
20080322 0009 7 0 0 4 5
20080322 0010 0 0 0 0 27
データが数分欠落しています(0002、0006、0007、0008)。欠落している行をデータフレームに挿入するための良い方法を探しています。私がこれまでに試したこと:
import pandas as pd
widths = [13,8,9,8,7,8]
df = pd.read_fwf("data", widths=widths)
df['date_time'] = pd.to_datetime(df['date_time'] , format='%Y%m%d %H%M')
df = df.set_index('date_time').reindex(pd.date_range("20080322 0000", "20080322 0010", freq='1min').strftime('%Y%m%d %H%M'), fill_value="NaN")
print (df)
欠落している行が表示されますが、すべての値はNaNです。何か案は?
考えられる解決策の1つは、日時への変換を削除し、文字列(によって作成されたDatetimeIndex.strftime
)でインデックスを再作成することです。
df = pd.read_fwf("data", widths=widths)
df = (df.set_index('date_time')
.reindex(pd.date_range("20080322 0000", "20080322 0010", freq='1min')
.strftime('%Y%m%d %H%M')))
print (df)
var1 var2 var3 var4 var6
20080322 0000 0.0 0.0 0.0 0.0 -11.0
20080322 0001 0.0 5.0 0.0 0.0 9.0
20080322 0002 NaN NaN NaN NaN NaN
20080322 0003 5.0 0.0 0.0 0.0 0.0
20080322 0004 0.0 0.0 11.0 0.0 -9.0
20080322 0005 0.0 12.0 0.0 0.0 1.0
20080322 0006 NaN NaN NaN NaN NaN
20080322 0007 NaN NaN NaN NaN NaN
20080322 0008 NaN NaN NaN NaN NaN
20080322 0009 7.0 0.0 0.0 4.0 5.0
20080322 0010 0.0 0.0 0.0 0.0 27.0
別の解決策はstrftime
、日時を文字列に変換するために削除することです。そのため、日時でインデックスを再作成します。
df = pd.read_fwf("data", widths=widths)
df['date_time'] = pd.to_datetime(df['date_time'] , format='%Y%m%d %H%M')
df = (df.set_index('date_time')
.reindex(pd.date_range("20080322 0000", "20080322 0010", freq='1min')))
または使用DataFrame.asfreq
-での作業DatetimeIndex
:
df = pd.read_fwf("data", widths=widths)
df['date_time'] = pd.to_datetime(df['date_time'] , format='%Y%m%d %H%M')
df = df.set_index('date_time').asfreq('1 Min')
print (df)
var1 var2 var3 var4 var6
2008-03-22 00:00:00 0.0 0.0 0.0 0.0 -11.0
2008-03-22 00:01:00 0.0 5.0 0.0 0.0 9.0
2008-03-22 00:02:00 NaN NaN NaN NaN NaN
2008-03-22 00:03:00 5.0 0.0 0.0 0.0 0.0
2008-03-22 00:04:00 0.0 0.0 11.0 0.0 -9.0
2008-03-22 00:05:00 0.0 12.0 0.0 0.0 1.0
2008-03-22 00:06:00 NaN NaN NaN NaN NaN
2008-03-22 00:07:00 NaN NaN NaN NaN NaN
2008-03-22 00:08:00 NaN NaN NaN NaN NaN
2008-03-22 00:09:00 7.0 0.0 0.0 4.0 5.0
2008-03-22 00:10:00 0.0 0.0 0.0 0.0 27.0
必要に応じて最後のindex
追加の元の形式DatetimeIndex.strftime
:
df.index = df.index.strftime('%Y%m%d %H%M')
print (df)
var1 var2 var3 var4 var6
20080322 0000 0.0 0.0 0.0 0.0 -11.0
20080322 0001 0.0 5.0 0.0 0.0 9.0
20080322 0002 NaN NaN NaN NaN NaN
20080322 0003 5.0 0.0 0.0 0.0 0.0
20080322 0004 0.0 0.0 11.0 0.0 -9.0
20080322 0005 0.0 12.0 0.0 0.0 1.0
20080322 0006 NaN NaN NaN NaN NaN
20080322 0007 NaN NaN NaN NaN NaN
20080322 0008 NaN NaN NaN NaN NaN
20080322 0009 7.0 0.0 0.0 4.0 5.0
20080322 0010 0.0 0.0 0.0 0.0 27.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加