【问题标题】:Append Rows to Pandas Dataframe in While loop在 While 循环中将行附加到 Pandas 数据帧
【发布时间】:2019-01-20 02:49:14
【问题描述】:

我编写了一个函数,该函数根据不同列中的值计算每年的预计人口(为简单起见,这些列未显示)。

如何将这些行附加到数据框中?

import pandas as pd

data = {
'state': ['Ohio','New York'],
'year': [2000,2000],
'pop': [2.5,3.6]
}
census = pd.DataFrame(data)

def projected_pop_by_year(s):
    new_census = pd.DataFrame()
    current_pop = census[census['state'] == s]['pop'].values[0]
    current_year = census[census['state'] == s]['year'].values[0]
    i = 0; count = 1
    while (i + 1) <= current_pop:
        projected_pop = None # some calculations
        data = {
            'state' : [s],
            'year' :  [current_year + count],
            'pop': [projected_pop]
        }
        print((pd.DataFrame(data)))
        i += 1; count += 1


projected_pop_by_year("Ohio")

期望的输出:

| State    | Year | Pop   |
|----------|------|-------|
| Ohio     | 2000 | 2.5   |
| New York | 2000 | 3.6   |
| Ohio     | 2001 | None  |
| Ohio     | 2002 | None  |

我尝试使用global new_census 在函数外部声明一个新数据框,并使用new_census.append(pd.DataFrame(data)) 附加行。我的代码不起作用。我试过pd.concat。那没有用。我尝试在函数内声明一个新的数据框。那没用。

感谢任何帮助。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这对我有用:

    def projected_pop_by_year(s):
        new_census = pd.DataFrame()
        current_pop = census[census['state'] == s]['pop'].values[0]
        current_year = census[census['state'] == s]['year'].values[0]
        i = 0; count = 1
        my_list = []
        while (i + 1) <= current_pop:
    
             projected_pop = None # some calculations
             data = {
                 'state' : [s],
                 'year' :  [current_year + count],
                 'pop': [projected_pop]
             }
             my_list.append(pd.DataFrame(data))
             #print(pd.DataFrame(data))
             i += 1; count += 1
        my_list = pd.concat(my_list)
        print(census.append(pd.DataFrame(my_list)))
    projected_pop_by_year("Ohio")
    
          state  year   pop
    0      Ohio  2000   2.5
    1  New York  2000   3.6
    0      Ohio  2001  None
    0      Ohio  2002  None
    

    说明 在while循环之前做一个列表,并通过追加列表来保存while循环的输出。最后将它们连接在一起并附加原始的census 数据帧。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      有几种方法可以向 Pandas DataFrame 添加行。当您知道如何添加行时,您可以在 while/for 循环中以符合您要求的方式进行添加。您可以在此处找到向 Pandas DataFrame 添加行的不同方法:

      https://thispointer.com/python-pandas-how-to-add-rows-in-a-dataframe-using-dataframe-append-loc-iloc/

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 2019-02-22
        • 2016-10-13
        • 2022-01-04
        • 2021-04-22
        相关资源
        最近更新 更多