用Pandas管理"NAN"(大写字母)的方法?

Method to manage "NAN" (in capital letters) with Pandas?

您知道是否有办法管理 Pandas 数据文件中所有大写字母的“NAN”吗?

我有一些数据文件具有这种格式:

"2020-08-14 14:00:00",10,154.9554,153.6879,154.3988,158.5282,"NAN","NAN",158.43,"NAN",155.2103

.isnull().isna() 函数在“NAN”大写时不处理,但在这样写“NaN”或“nan”时处理。

提前谢谢你,我寻找了其他主题,但没有找到关于这个特定主题的内容。

isnullisnaNOT return 无论大小写对字符串都是正确的。

您很可能混合使用了真实的 NaN 和字符串:

s = pd.Series([float('nan'), 'NAN', 'nan', 'NaN'])
df = pd.concat({'s': s, 'isnull': s.isnull(), 'isna': s.isna()}, axis=1)

输出:

     s  isnull   isna
0  NaN    True   True
1  NAN   False  False
2  nan   False  False
3  NaN   False  False

现在,默认情况下,read_csv 将以下字符串识别为 NaN:

'', '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
'-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'

您可以使用 na_values 选项添加 "NAN"

df = pd.read_csv(..., na_values=['NAN'])

您可以简单地使用 .replace 如下

import pandas as pd
df = pd.DataFrame({"x":[1.5,2.5,"NAN",3.5,4.5,"NAN",6.5,7.5]})
print(df.x.mean())  # TypeError: unsupported operand type(s) for +: 'float' and 'str'
df.replace("NAN",float("nan"),inplace=True)
print(df.x.mean())  # 4.333333333333333

或者如果您希望将新的 pandas.DataFrame 和 NAN-string 替换为“真正的”NaN

df2 = df.replace("NAN",float("nan"))

尝试.replace()分配nan值,然后你就可以正确使用它们nan:

df["column"].replace({"NAN": np.nan})