K C*_*man 21 python dataframe pandas
我本来可以正常工作,但现在我改变了“某些东西”,它就不再工作了。我在 Excel 中有一个表,我正在将其读入 df. 这按预期工作。我读入它,然后对其进行过滤,这样我就只有符合特定条件的数据行。这是代码:
df = excel_range_upper_left.options(pd.DataFrame, expand='table', header=1,
index=False).value
print(f'Check for missings')
for c in df.columns:
count = df[c].isnull().sum()
print(f'Col {c} has {count} missing values')
print(f'Done checking for missings')
df = df[df["Phase"].str.contains('2')] #, na=False)]
Run Code Online (Sandbox Code Playgroud)
for 循环循环遍历 df 列以查找缺失值。它们全部返回为 0 个缺失值。
然后我执行最后一条语句,它(我认为)应该简单地将 df 过滤为一个新的 df(同名),该新的 df 在“Phase”列中必须具有字符串值“2”。以及它出错的地方Cannot mask...。
我的猜测是表中的某处仍然缺少值,但我已经用尽了找到它的能力(我也尝试了以下操作 - 但它的结果与原始 df 相同,并且仍然出错:
print(f'{exer_df.dropna(axis=1)}')
Run Code Online (Sandbox Code Playgroud)
如果我将过滤器行更改为以下内容,使其包含该na=False选项,则一切正常。但我不知道为什么...
exer_df = exer_df[exer_df["Phase"].str.contains('2', na=False)]
Run Code Online (Sandbox Code Playgroud)
有人有任何见解和帮助吗?
为了完整起见,以下是 for 循环的结果和错误:
Check for missings
Col Type as 0 missing values
Col Sub-Type as 0 missing values
Col Phase as 0 missing values
Col Body Parts as 0 missing values
Col Sets as 0 missing values
Col Reps as 0 missing values
Col Tempo as 0 missing values
Col Intensity as 0 missing values
Col Rest Period as 0 missing values
Col Exercise as 0 missing values
Col Prim Mover as 0 missing values
Done checking for miossings
Traceback (most recent call last):
File "c:/Users/kirby/OneDrive/Beating Old Age Book/Blog Page Text/nutrition/calculations/plan_creator.py", line 271, in <module>
mcp()
File "c:/Users/kirby/OneDrive/Beating Old Age Book/Blog Page Text/nutrition/calculations/plan_creator.py", line 188, in mcp
exer_df = exer_df[exer_df["Phase"].str.contains('2')] #, na=False)]
File "C:\Users\kirby\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\frame.py", line 3014, in __getitem__
if com.is_bool_indexer(key):
File "C:\Users\kirby\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\common.py", line 114, in is_bool_indexer
raise ValueError(na_msg)
ValueError: Cannot mask with non-boolean array containing NA / NaN values
Run Code Online (Sandbox Code Playgroud)
小智 26
正如原始海报已经指出的那样,使用参数na=False一切都应该正常工作。
如果您尝试在导入的 Excel DataFrame 中使用Series.str.contains空白值,则会引发 ValueError:“无法使用包含 NA / NaN 值的非布尔数组进行掩码”
指定na为False( na=False),将 NaN 值替换为 False 值并避免此错误;另一种解决方案是Series.fillna(False)在调用该函数之前。
不知何故,使用其他填充值在这种特定情况下不起作用,它需要是 Bool。
小智 7
我刚刚通过这样做摆脱了类似的事情(错误的文本完全相同):
df.dropna()[df.dropna()['Label'].str.contains('target')]
Run Code Online (Sandbox Code Playgroud)
因此,道德可能是您也需要将 NaN 放在括号内。
| 归档时间: |
|
| 查看次数: |
47626 次 |
| 最近记录: |