fill records in pandas dataframe

下のようなx=1から始まるデータをグラフにしたい時、 単純にplotをしたのでは、xの値が飛んでしまう。

x y
1 3
2 4
5 6
6 10
9 8

そこで、xの値を埋める。

comp_diff = pd.DataFrame({'column_1': range(0, df['column_1'].max() + 2)})
merged_df = comp_diff.merge(df, on='xolumn_1', how='left')
merged_df = merged_df.fillna({'column_2':0})

これで、xの値が飛ばされることなく、グラフを描くことができる。

fill datetime records in pandas dataframe

日付のデータをグラフにしたい時、 単純にplotをしたのでは、上のように、日付の値が飛んでしまう場合がある。

そこで、日付の値を埋める。 たとえば、分ごとにデータを取得している場合は次のようにする。

comp_diff = pd.DataFrame({'date': pd.date_range(df['date'].min(), df['date'].max(), freq='1min')})
merged_df = comp_diff.merge(df, on='date', how='left')
merged_df = merged_df.fillna({'column_2':0})

DateTimeIndexがしていされているDataFrameに対しては:

plt = plt.asfreq('T').fillna({'column_2': data_key, 'column_3': 0})

asfreq の引数としてfill_valueを指定することもできる。

When you want to plot data like the following, you cannot plot it simply because the value of x is skipped.

x y
1 3
2 4
6 4
7 5

So, fill the value of `x`.

comp_diff = pd.DataFrame({'column_1': range(0, df['column_1'].max() + 2)})
merged_df = comp_diff.merge(df, on='xolumn_1', how='left')
merged_df = merged_df.fillna({'column_2':0})

Then, you can plot the data without skipping the value of `x`.

fill datetime records in pandas dataframe

When you want to plot data like the following, you cannot plot it simply because the value of date is skipped.

date y
2021-10-01 00:00:00 3
2021-10-01 00:01:00 4
2021-10-01 00:05:00 4
2021-10-01 00:06:00 5

So, fill the value of `date`.

comp_diff = pd.DataFrame({'date': pd.date_range(df['date'].min(), df['date'].max(), freq='1min')})
merged_df = comp_diff.merge(df, on='date', how='left')
merged_df = merged_df.fillna({'column_2':0})

For DataFrame with `DateTimeIndex`:

plt = plt.asfreq('T').fillna({'column_2': data_key, 'column_3': 0})

You can also specify `fill_value` as an argument of `asfreq`.