首页 > 解决方案 > pandas fillna 有列数和行数限制吗?

问题描述

我在 4253532 行 × 151 列的数据框中使用 pandas fillna,它不起作用。返回是没有变化的df。我尝试了不同method的,都保持 df 不变。
相同的代码在 3741814 行 × 4 列的数据帧中运行良好。

df2=df.fillna(method='ffill',axis=1)

df.fillna(value=10,inplace=True)

我尝试返回一个新的 df 并就地,两者都不起作用。
我确信每一行至少有一个有效值。
有人遇到同样的问题吗?熊猫有限制吗?

更多信息 \

东风:

print(b.to_markdown())

|         |       8000001 |   8000016 |   8000017 |   8000018 |   8000019 |
|--------:|--------------:|----------:|----------:|----------:|----------:|
| 4253527 |   2.00711e+07 |       nan |       nan |       nan |       nan |
| 4253528 | nan           |       nan |       nan |       nan |       nan |
| 4253529 | nan           |       nan |       nan |       nan |       nan |
| 4253530 | nan           |       nan |       nan |       nan |       nan |
| 4253531 | nan           |       nan |       nan |       nan |       nan |

数据类型:

b.dtypes

ITEM_OBJECT_ID
8000001    float64
8000016    float64
8000017    float64
8000018    float64
8000019    float64
dtype: object

是楠:

print(np.isnan(b).to_markdown())

|         |   8000001 |   8000016 |   8000017 |   8000018 |   8000019 |
|--------:|----------:|----------:|----------:|----------:|----------:|
| 4253527 |         0 |         1 |         1 |         1 |         1 |
| 4253528 |         1 |         1 |         1 |         1 |         1 |
| 4253529 |         1 |         1 |         1 |         1 |         1 |
| 4253530 |         1 |         1 |         1 |         1 |         1 |
| 4253531 |         1 |         1 |         1 |         1 |         1 |

填写:

print(b.fillna(100).to_markdown())

|         |       8000001 |   8000016 |   8000017 |   8000018 |   8000019 |
|--------:|--------------:|----------:|----------:|----------:|----------:|
| 4253527 |   2.00711e+07 |       nan |       nan |       nan |       nan |
| 4253528 | nan           |       nan |       nan |       nan |       nan |
| 4253529 | nan           |       nan |       nan |       nan |       nan |
| 4253530 | nan           |       nan |       nan |       nan |       nan |
| 4253531 | nan           |       nan |       nan |       nan |       nan |

print(b.fillna(method='ffill',axis=1).to_markdown())

|         |       8000001 |   8000016 |   8000017 |   8000018 |   8000019 |
|--------:|--------------:|----------:|----------:|----------:|----------:|
| 4253527 |   2.00711e+07 |       nan |       nan |       nan |       nan |
| 4253528 | nan           |       nan |       nan |       nan |       nan |
| 4253529 | nan           |       nan |       nan |       nan |       nan |
| 4253530 | nan           |       nan |       nan |       nan |       nan |
| 4253531 | nan           |       nan |       nan |       nan |       nan |

标签: pandasfillna

解决方案


据我所知,熊猫没有限制。我已经在数百万行的数据帧上使用了 fillna 方法,没有任何麻烦。

例如 :

import pandas as pd
import random
import numpy as np



df = pd.DataFrame(
        {
                'A' : [random.choice([np.nan] + list(range(10))) for x in range(int(1e6))],
                'B' : [random.choice([np.nan] + list(range(10))) for x in range(int(1e6))],
                'C' : [random.choice(['a', 'b', 'c'])  for x in range(int(1e6))]
        }
)
df = df.fillna("bla")
print(
      df[(df.values=="bla").any(axis=1)]
      )

它也适用于 1e7 行。所以也许,这在你的第一个数据框中是个麻烦?


推荐阅读