从pandas DataFrame的列中查找,提取和重新追加年份

时间:2019-06-07 15:18:54

标签: python pandas dataframe

我已经使用外部来源的“ read html”方法创建了一个熊猫数据框。创建数据框没有问题,但是,我一直在努力调整第一列“月”的结构。

我要抓取的数据每月从源头更新一次,因此,该解决方案需要动态方法。到目前为止,我只能使用.iloc手动更新每一行来达到预期的结果,这种方法可以正常工作,直到下个月在源上更新数据为止。

这是我的数据框的样子:

df = pd.read_html(url)
df
    Month           Value
0   2017            NaN
1   November        1.29
2   December        1.29
3   2018            NaN
4   January         1.29
5   February        1.29
6   March           1.29
7   April           1.29
8   May             1.29
9   June            1.28
10  July            1.28
11  August          1.28
12  September       1.28
13  October         1.26
14  November        1.16
15  December        1.09
16  2019            NaN
17  January         1.25
18  February        1.34
19  March           1.34
20  April           1.34

这是我想要的结果:

df
    Month           Value
0   November 2017   1.29
2   December 2017   1.29
4   January 2018    1.29
5   February 2018   1.29
6   March 2018      1.29
7   April 2018      1.29
8   May 2018        1.29
9   June 2018       1.28
10  July 2018       1.28
11  August 2018     1.28
12  September 2018  1.28
13  October 2018    1.26
14  November 2018   1.16
15  December 2018   1.09
17  January 2019    1.25
18  February 2019   1.34
19  March 2019      1.34
20  April 2019      1.34

现在,我想出的最好的主意是选择,提取年份并将其附加到“月”列中的每一行,直到达到“十二月”月,然后切换到下一个/递增到下一个年,但我不知道如何在代码中实现这一点。这将是可行的解决方案(以及如何实施?)还是有更好的方法?

非常感谢长期阅读我们的读者以及第一次发布stackoverflow的人!

1 个答案:

答案 0 :(得分:1)

使用基于值的ffill,如果它是NaN,那么我们应该在此处预先填充年份以供将来粘贴

df.Month=df.Month+' '+df.Month.where(df.Value.isna()).ffill().astype(str)
df.dropna(inplace=True)
df
Out[29]: 
             Month  Value
1    November 2017   1.29
2    December 2017   1.29
4     Januari 2018   1.29
5    Februari 2018   1.29
6        Mars 2018   1.29
7       April 2018   1.29
8         Maj 2018   1.29
9        Juni 2018   1.28
10       Juli 2018   1.28
11    Augusti 2018   1.28
12  September 2018   1.28
13    Oktober 2018   1.26
14   November 2018   1.16
15   December 2018   1.09
17    Januari 2019   1.25
18   Februari 2019   1.34
19       Mars 2019   1.34
20      April 2019   1.34