【问题标题】:how to fill dataframe with former value? [duplicate]如何用以前的值填充数据框? [复制]
【发布时间】:2019-11-09 03:28:31
【问题描述】:

我从 excel 文件中导入数据。但是excel文件中合并单元格的格式在python中不匹配。因此,我不得不修改python中的数据。

例如:我在python中导入的数据是这样的

0   aa
1   NaN
2   NaN
3   NaN
4   b
5   NaN
6   NaN
7   NaN
8   NaN
9   ccc
10  NaN
11  NaN
12  NaN
13  dd
14  NaN
15  NaN
16  NaN

我想要的结果是:

0   aa
1   aa
2   aa
3   aa
4   b
5   b
6   b
7   b
8   b
9   ccc
10  ccc
11  ccc
12  ccc
13  dd
14  dd
15  dd
16  dd

我尝试使用 for 循环来解决问题。但这花了很多时间,而且我有一个庞大的数据集。不知道有没有更快的方法。

【问题讨论】:

  • 您正在将数据加载到 pandas 数据框,对吧?
  • 数据类型应该是字符串而不是浮点数,抱歉
  • 如果您对问题有补充,最好编辑问题并将其添加到那里,而不是在评论中。
  • @Itamar Mushkin 是的
  • 转换类型-df = df.astype(str)

标签: python pandas dataframe


【解决方案1】:

看起来像 .fillna() is your friend – 引用文档::

我们还可以向前或向后传播非空值。

>>> df
     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  NaN  NaN NaN  5
3  NaN  3.0 NaN  4
>>> df.fillna(method='ffill')
    A   B   C   D
0   NaN 2.0 NaN 0
1   3.0 4.0 NaN 1
2   3.0 4.0 NaN 5
3   3.0 3.0 NaN 4

【讨论】:

  • 啊,打败我了 :-)
  • @AKX 你能帮我重新修改问题格式吗?
【解决方案2】:

这正是pandas.fillna()函数的使用

【讨论】:

    【解决方案3】:

    您可以借助applyfillna 方法获得您想要的结果:-

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(data = {'A':['a', np.nan, np.nan, 'b', np.nan]})
    
    l = []
    def change(value): 
        if value == "bhale":
            value = l[-1]
            return value
        else:        
            l.append(value)
            return value
    
    # First converting NaN values into any string value like `bhale` here
    df['A'] = df['A'].fillna('bhale')  
    df["A"] = df['A'].apply(change)   # Using apply method.
    df
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2015-12-20
      相关资源
      最近更新 更多