Python 如何在pandas中插入缺少的行?
我有以下问题。我正在制作一张热图。为了使我的数据框更加“热图友好”,我需要在X轴和Y轴上填充缺失的值。这就是我的数据帧现在的样子: 我需要遍历两个轴(轴=0的范围为20-393,轴=1的范围为584-648),如果我的数据帧thwn中缺少该轴,则插入一个满是零的列 我听从了这里的建议()并尝试:Python 如何在pandas中插入缺少的行?,python,pandas,Python,Pandas,我有以下问题。我正在制作一张热图。为了使我的数据框更加“热图友好”,我需要在X轴和Y轴上填充缺失的值。这就是我的数据帧现在的样子: 我需要遍历两个轴(轴=0的范围为20-393,轴=1的范围为584-648),如果我的数据帧thwn中缺少该轴,则插入一个满是零的列 我听从了这里的建议()并尝试: df = df.reindex(range(20,393), axis=0, fill_value=0) df = df.reindex(range(584,648), axis=1, fill_va
df = df.reindex(range(20,393), axis=0, fill_value=0)
df = df.reindex(range(584,648), axis=1, fill_value=0).astype(int)
但它会将所有现有值重写为零(包括非零值)。你能帮帮我吗?这个答案似乎与我的情况无关:
编辑:
可复制示例:
import pandas as pd
my_df = pd.DataFrame(data={'Centroid1': [20, 20, 22, 26, 27],
'Centroid2': [584, 596, 597, 608, 602],
'counts': [2, 0, 0, 1, 1]})
my_df = my_df.reset_index().pivot(index='Centroid2',
columns='Centroid1', values='counts')
my_df.fillna(0, inplace=True)
#HOW TO FILL MISSING COLUMNS 20-30 and 582-605???
#examples bellow does not work - everything is zero
#Ex 1:
my_df = my_df.rename(columns=int, index=int)
my_df = my_df.reindex(index=range(20,30), columns=range(582,605), fill_value=0)
#Ex 2:
my_df = my_df.reindex(range(20,30), axis=0, fill_value=0)
my_df = my_df.reindex(range(582,605), axis=1, fill_value=0).astype(int)
似乎您可以互相交换索引和列的范围:
my_df = my_df.reindex(index=range(582,605), columns=range(20,30), fill_value=0).astype(int)
print (my_df)
Centroid1 20 21 22 23 24 25 26 27 28 29
Centroid2
582 0 0 0 0 0 0 0 0 0 0
583 0 0 0 0 0 0 0 0 0 0
584 2 0 0 0 0 0 0 0 0 0
585 0 0 0 0 0 0 0 0 0 0
586 0 0 0 0 0 0 0 0 0 0
587 0 0 0 0 0 0 0 0 0 0
588 0 0 0 0 0 0 0 0 0 0
589 0 0 0 0 0 0 0 0 0 0
590 0 0 0 0 0 0 0 0 0 0
591 0 0 0 0 0 0 0 0 0 0
592 0 0 0 0 0 0 0 0 0 0
593 0 0 0 0 0 0 0 0 0 0
594 0 0 0 0 0 0 0 0 0 0
595 0 0 0 0 0 0 0 0 0 0
596 0 0 0 0 0 0 0 0 0 0
597 0 0 0 0 0 0 0 0 0 0
598 0 0 0 0 0 0 0 0 0 0
599 0 0 0 0 0 0 0 0 0 0
600 0 0 0 0 0 0 0 0 0 0
601 0 0 0 0 0 0 0 0 0 0
602 0 0 0 0 0 0 0 1 0 0
603 0 0 0 0 0 0 0 0 0 0
604 0 0 0 0 0 0 0 0 0 0
假设df_calc是您最初计算的数据框,您需要的数据框是df_final
df_final=pd.DataFrame()
df_final=df_final.reindex(范围(20393),轴=0,填充值=0)
df_final=df_final.reindex(范围(584648),轴=1,填充值=0)。aType(int)
df_最终更新(df_计算)
@vojtam-感谢您提供的示例、编辑过的答案。