我使用的是python3.6.4和pandas0.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]]))
现在如何添加r2018,只有5月份的数据?你知道吗
我同意RafaelC的观点,用NaN填充2018年的数据是最好的方法。您可以使用Numpy中的
np.nan
(自从有了Pandas之后,您就已经安装了Numpy)来生成nan。你知道吗作为对代码的一个小改动,我将所有三年的数据放入了一个
years
列表中,我们可以将其作为data
参数传递给pd.数据帧. 这样就不需要将每一行附加到前一行。你知道吗这是年份的样子:[[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填充。你知道吗
最后,我们可以使用下面的一行代码来创建数据帧,而不是逐行追加。你知道吗
输出:
您可能注意到,我使用
.astype(float)
将数据帧中的值的数据类型转换为float。我这样做是为了使所有列都具有相同的数据类型。如果我们不调用.astype(float)
,那么Jan-May将是数据类型int
,Jun-Dec将是数据类型float64
。你知道吗可以通过序列使用
pd.DataFrame.loc
添加行。因此,在添加行之前,只需将数组转换为pd.Series
对象:但是,我强烈建议您在单个附加之前形成一个列表列表(带填充)。这是因为
list.append
,或者通过列表理解的构造,相对于重复的pd.DataFrame.append
或者pd.DataFrame.loc
是便宜的。你知道吗如果必须一次添加一行,建议使用上述解决方案。你知道吗
相关问题 更多 >
编程相关推荐