我一直在尝试从给定的数据集中提取特定的数据,并将其添加到特定的有组织的列集中的新数据集中。我正在通过读取CSV文件并使用字符串函数来做到这一点。问题是,即使正确地提取了数据,即使受影响的变量中存储了数据,Pandas也会将第二列添加为NaN,请参阅下面的代码,有关如何解决此问题的任何想法?
processor=pd.DataFrame()
Hospital_beds="SH.MED.BEDS.ZS"
Mask1=data["IndicatorCode"].str.contains(Hospital_beds)
stage=data[Mask1]
Hospital_Data=stage["Value"]
Birth_Rate="SP.DYN.CBRT.IN"
Mask=data["IndicatorCode"].str.contains(Birth_Rate)
stage=data[Mask]
Birth_Data=stage["Value"]
processor["Countries"]=stage["CountryCode"]
processor["Birth Rate per 1000 people"]=Birth_Data
processor["Hospital beds per 100 people"]=Hospital_Data
processor.head(10)
答案 0 :(得分:0)
这里的问题是索引不匹配。最初填充processor
数据框时,您正在使用包含出生率数据的原始数据框中的每一行。这些行与包含医院病床数据的行不同,因此当您进行
processor["Hospital beds per 100 people"] = Hospital_Data
pandas将创建新列,但是由于Hospital_Data
中processor
没有匹配的索引,因此它将仅包含空值。
可能您首先要做的是使用国家/地区代码和年份对原始数据重新编制索引
data.set_index(['CountryCode','Year'], inplace=True)
然后您可以仅创建您感兴趣的指标的视图
indicators = ['SH.MED.BEDS.ZS', 'SP.DYN.CBRT.IN']
dview = data[data.IndicatorCode.isin(indicators)]
最后,您可以在指标代码上pivot来查看同一行上的每个指标
dview.pivot(columns='IndicatorCode')['Value']
但是请注意,这仍然会包含很多NaN。这仅仅是因为医院的床位数据很少被更新(例如,根本不在Aruba中)。但是您可以根据需要将其过滤掉。