python - 如何为某些列添加没有值的行

标签 python python-3.x pandas

我使用的是 python 3.6.4 和 pandas 0.23.0。我已经为构造函数和追加引用了 pandas 0.23.0 文档。它没有提及任何关于不存在的值。我没有找到任何类似的例子。

考虑以下代码:

import pandas as pd

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

index_yrs = [2016, 2017, 2018]

r2016 = [26, 27, 25, 22, 20, 23, 22, 20, 20, 18, 18, 19]
r2017 = [20, 21, 18, 16, 15, 15, 15, 15, 13, 13, 14, 15]
r2018 = [16,  18,  18,  18,  17]

df = pd.DataFrame([r2016], columns = months, index = [index_yrs[0]])
df = df.append(pd.DataFrame([r2017], columns = months, index = [index_yrs[1]]))

现在如何添加只有到 5 月份的数据的 r2018?

最佳答案

我同意 RafaelC 的观点,即使用 NaN 填充缺失值的 2018 年数据列表是执行此操作的最佳方法。您可以使用 Numpy 中的 np.nan(您已经安装了 Pandas)来生成 NaN。

import pandas as pd
import numpy as np

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

index_yrs = [2016, 2017, 2018]

作为对您的代码的一个小改动,我将所有三年的数据都放入了一个 years 列表中,我们可以将其作为 pd.DataFrame 的 data 参数传递。这消除了将每一行附加到前面的行的需要。

r2016 = [26, 27, 25, 22, 20, 23, 22, 20, 20, 18, 18, 19]
r2017 = [20, 21, 18, 16, 15, 15, 15, 15, 13, 13, 14, 15]
r2018 = [16,  18,  18,  18,  17]
years = [r2016] + [r2017] + [r2018]  

这是年份的样子:[[26, 27, 25, 22, 20, 23, 22, 20, 20, 18, 18, 19], [20, 21, 18, 16, 15, 15, 15, 15, 13, 13, 14, 15], [16, 18, 18, 18, 17]]。

至于用 NaN 填充你的 2018 年,像这样的东西可能会成功。我们只是确保如果一年只有前 n 个月的值,则其余月份将用 NaN 填充。

for year in years:
    if len(year) < 12:
        year.extend([np.nan] * (12 - len(year)))

最后,我们可以使用下面的一行而不是逐行附加来创建您的数据框。

df = pd.DataFrame(years, columns=months, index=index_yrs).astype(float)

输出:

      Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2016  26.0  27.0  25.0  22.0  20.0  23.0  22.0  20.0  20.0  18.0  18.0  19.0
2017  20.0  21.0  18.0  16.0  15.0  15.0  15.0  15.0  13.0  13.0  14.0  15.0
2018  16.0  18.0  18.0  18.0  17.0  NaN   NaN   NaN   NaN   NaN   NaN   NaN

您可能会注意到,我使用 .astype(float) 将数据框中值的 dtype 转换为 float。我这样做是为了使您的所有列都具有相同的数据类型。如果我们不调用 .astype(float),那么 Jan-May 将是 dtype int,而 Jun-Dec 将是 dtype float64

关于python - 如何为某些列添加没有值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546740/

相关文章:

python - 如何在 OSX High Sierra 中正确设置网状包的 Python 路径?

python - 评估列中唯一值的 True 百分比

Python打印多行?

python - Pandas 中带有运行编号的新列,有条件地递增

python - 在 Python 正则表达式中指定匹配新行的不同方法

python - 根据重复条目条件过滤数据帧

python - 聚合分类列的问题

Python Pandas 合并关键字/句子

Python递归向后打印列表中的项目

django - 如何缓存 FileField 中的文件以避免重复(Django、DRF)