[英]Pandas storing NaN value when adding new column to existing DataFrame
Reading.xls 文件包含自 2000 年以来的巴西人口估计,我从 2000.xls 文件开始填充一个名为main_df的 dataframe,起初看起来像
STATE STATE_CODE CITY CITY_CODE 2000_POP
SP X Sao Paulo Y 10.000.000 ...
从 2001 年到 2020 年遍历 *.xls 文件后, main_df应该如下所示:
STATE STATE_CODE CITY CITY_CODE 2000_POP 2001_POP 2002_POP ... 2020_POP SP X Sao Paulo Y 10.000.000 m n ... p ...
为了实现它,我以一种不太有效的方式使用 Pandas,遍历 df 行,但无论如何,这就是我发现寻找城市和 state 代码的人口规模的方式。
作为df代表 2001 ~ 2020 年城市人口估计的数据框。
下面是迭代每个df行试图填充main_df的代码片段:
df = pd.read_excel(filename, encoding='latin_1', sep=',')
column_year_id = filename.strip('.xls')
df.columns = ['STATE', 'STATE_CODE', 'CITY', 'CITY_CODE', column_year_id]
for index, row in df.iterrows():
target_uf = (row['STATE_CODE'])
target_city_code = (str(row['CITY_CODE']))
population_on_current_year = row[-1]
selection = (main_df['STATE_CODE'] == target_uf) & (main_df['CITY_CODE'] == target_city_code)
main_df.loc[selection, column_year_id] = population_on_current_year
问题是,在一天结束时, main_df最终只填充了其原始的 2000 人口规模列,但是,从 2001 年到 2020 年,它填充了 NaN 值,如下所示:
STATE STATE_CODE CITY CITY_CODE 2000_POP 2001_POP 2002_POP ... 2020_POP SP X Sao Paulo Y 10.000.000 NaN NaN ... NaN ...
为什么会这样,我应该怎么做才能让它发挥作用?
问题似乎是因为我无法将元素插入到特定的 position 中,就像main_df是一个使用main_df[index, column]的数组一样。 Pandas 是否允许这种插入?
编辑 1:这就是我创建main_df的方式:
main_df = pd.read_excel(filename, encoding='latin_1', sep=',')
我能够做我想做的事:
selection = (main_df['COD_UF'] == target_state) & (main_df['COD_MUN'] == target_city)
index = main_df.loc[selection].index
main_df.loc[index.values[0], column_year_id] = population_on_current_year
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.