pandas - 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 |
解决方案
据我所知,熊猫没有限制。我已经在数百万行的数据帧上使用了 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 行。所以也许,这在你的第一个数据框中是个麻烦?
推荐阅读
- python-3.x - 在python3的foreach循环中定义步长
- sql - 为什么这个 Postgis 距离查询这么慢?Postgres 的查询估计器减少了 10000 倍?
- javascript - JavaScript 对象数组 - 基于嵌套对象从数组中删除重复对象
- java - 使用 JNDI 和 DataSource 的简单应用程序,没有服务器、ServiceUnavailableException、ConnectException
- .net - 在 Azure App Services 应用程序中向 localhost 发出请求
- javascript - 数以千计的引导开关:强制回流可能是性能瓶颈
- java - 从 Firebase 实时数据库获取当前用户信息
- windows - 尝试构建 docker 映像时,我得到“”gcc“:$PATH 中找不到可执行文件”
- unicode - SCSS 处理器 Unicode 输出不正确
- r - 如何增加 Rstudio 中的内存限制?