【问题标题】:Filter column by float value in pandas dataframe, and fill-forward在熊猫数据框中按浮点值过滤列,并向前填充
【发布时间】:2020-03-09 02:56:37
【问题描述】:

我有这个数据框:

    difer   length     
0   0.11          4
1   NaN           6
2   01_00532      54
3   NaN           32
4   NaN           12 
5   0.10          12
6   Nan           123 

我想用浮点值替换difer 列中的所有其他值。所以将所有值更改为 0.11 直到下一个浮点值 (0.10),然后用 0.10 重复。

   difer        length     
0   0.11          4
1   0.11          6
2   0.11          54
3   0.11          32
4   0.11          12 
5   0.10          12
6   0.10          123  

对于第一部分(过滤列),我发现了一个类似的问题 filter float values.

该人建议使用pd.to_numeric 和布尔索引 但我不知道他为什么以df.SIC这种形式写列名。它对我不起作用:

df[pd.to_numeric(df.SIC, errors='coerce').isnull()]

对于第二部分(如何将所有值更改为 0.11 直到下一个浮点值(0.10)并用 0.10 重复),我不知道。

【问题讨论】:

  • 另一个答案说将该列称为SIC,因为这是它的名字! df.SICdf['SIC'] 是按名称引用列的两种方式。但显然你的专栏被称为difer 而不是SIC
  • 至于“将所有值更改为 0.11 直到下一个浮点值”,这称为 “向前填充”。请参阅文档以获取 df.fillna(..., method='ffill') 及其同义词 df.ffill()

标签: python python-3.x regex pandas dataframe


【解决方案1】:

在您的列上使用pd.to_numericerrors='coerce' 将使用NaN 填充所有非数值,最后使用ffill 向前填充列。

df['difer'] = pd.to_numeric(df['difer'], errors='coerce').ffill()

输出

   difer  length
0   0.11       4
1   0.11       6
2   0.11      54
3   0.11      32
4   0.11      12
5   0.10      12
6   0.10     123

注意:

通过df.diferdf['difer'] 访问列没有区别。仅当您在列名中有空格时,这才会导致问题。在这种情况下使用后者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2018-01-02
    • 1970-01-01
    • 2020-11-19
    • 2017-12-15
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多