Pandas fillna是否有列数和行数限制?
我在4253532行×151列的数据帧中使用了Pillna,它不起作用。返回的是没有变化的df。我尝试了不同的Pandas fillna是否有列数和行数限制?,pandas,fillna,Pandas,Fillna,我在4253532行×151列的数据帧中使用了Pillna,它不起作用。返回的是没有变化的df。我尝试了不同的方法,都保持了df不变 相同的代码在3741814行×4列数据帧中运行良好 df2=df.fillna(方法='ffill',轴=1) df.fillna(值=10,inplace=True) 我尝试返回一个新的df和inplace,两者都不起作用 我确信每行至少有一个有效值。 有人遇到同样的问题吗?熊猫有限制吗 更多信息\ df: 数据类型: b.dtypes ITEM_OBJECT
方法
,都保持了df不变相同的代码在3741814行×4列数据帧中运行良好
df2=df.fillna(方法='ffill',轴=1)
df.fillna(值=10,inplace=True)
我尝试返回一个新的df和inplace,两者都不起作用我确信每行至少有一个有效值。
有人遇到同样的问题吗?熊猫有限制吗 更多信息\ df: 数据类型:
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行。所以,这可能是您的第一个数据帧中的一个问题?您能详细说明一下“它不工作”吗?你有例外吗/你没有得到你期望的结果吗。。。实际上发生了什么?你没有错过它返回一个新的数据帧吗?(未更改)->df=df.fillna(method=“ffill”,axis=1)谢谢!我复制了数据帧的一部分并显示了每个步骤,但我找不到问题出在哪里。您是否尝试过.replace(“nan”,“dummy”)检查它是否未转换为str?它不能替换为b.replace('nan','str'),但可以替换为b.replace({np.nan:'str')。我尝试先运行c=b.replace({np.nan:None}),然后运行c.fillna(method='ffill')!我不知道为什么,虽然这个问题只在这个df中出现(所有数据帧都是由一个脚本生成的)。。。您是否尝试在此数据帧中收集一个NaN值(使用类似df.loc[0,“blah”])并打印它?我似乎记得有一次,我在NaN和NaN的多个构造函数(在pandas中显示相同但不等效)方面遇到了问题……它们在.replace({np.NaN:None})之前/之后具有np.NaN或None的一般属性。.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)]
)