脚印拾零 发表于 2020-4-2 21:13:49

请问这段代码哪里出错了

请问这段代码哪里出错了,我想筛选出”会计科目“这一列数值等于”投资收益“,”经营收入“,”其他收入“等这些数据应该怎么写
import pandas as pd
df = pd.read_excel(r'C:\Users\baoch\Desktop\test\财务收支公开明细表.XLSX',header =8)
#nrows = df.shape
#print(nrows)
df2 = df.str.contains('其他收入')]
print(df2)

错误信息如下:
C:\Users\baoch\AppData\Local\Programs\Python\Python38\python.exe C:/Users/baoch/Desktop/test/提取收入明细.py
Traceback (most recent call last):
File "C:/Users/baoch/Desktop/test/提取收入明细.py", line 5, in <module>
    df2 = df.str.contains('其他收入')]
File "C:\Users\baoch\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\frame.py", line 2790, in __getitem__
    if com.is_bool_indexer(key):
File "C:\Users\baoch\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\common.py", line 136, in is_bool_indexer
    raise ValueError(na_msg)
ValueError: Cannot mask with non-boolean array containing NA / NaN values

Process finished with exit code 1

脚印拾零 发表于 2020-4-2 21:38:54

哪位大神指点下

Pythonbn 发表于 2020-4-3 10:32:32

import pandas as pd
df = pd.read_excel(r'C:\Users\baoch\Desktop\test\财务收支公开明细表.XLSX',header =8)
#nrows = df.shape
#print(nrows)
df2 = df.str.contains('其他收入')]
print(df2)

Pythonbn 发表于 2020-4-3 10:33:08

不要用#,删掉

zltzlt 发表于 2020-4-3 13:11:11

Pythonbn 发表于 2020-4-3 10:33
不要用#,删掉

删掉就能正确运行吗?

Pythonbn 发表于 2020-4-3 14:46:46

zltzlt 发表于 2020-4-3 13:11
删掉就能正确运行吗?

是的,我在网上看过

脚印拾零 发表于 2020-4-3 21:32:32

Pythonbn 发表于 2020-4-3 14:46
是的,我在网上看过

兄嘚,你的答案貌似有点离谱啊{:10_245:},我加“#”,是因为那两句不需要运行,我就是写出来以防万一要用到。不过谢谢你的回答,我已经测试出来了。后面加上恒等于1就行了,df2 = df.str.contains('其他收入')==1]

Chysial 发表于 2020-4-3 21:43:25

要我帮忙吗?
你那种方法我是没用过,我一般这么提取,某一列值判断是否等于某一值然后提取
df.loc].isin([”投资收益“,”经营收入“,”其他收入“])

脚印拾零 发表于 2020-4-11 20:11:55

Chysial 发表于 2020-4-3 21:43
要我帮忙吗?
你那种方法我是没用过,我一般这么提取,某一列值判断是否等于某一值然后提取
df.loc

你这个方法是同时满足这三个条件还是满足其中一个就可以提取啊

Chysial 发表于 2020-4-15 11:06:23

脚印拾零 发表于 2020-4-11 20:11
你这个方法是同时满足这三个条件还是满足其中一个就可以提取啊

满足一个就可以
页: [1]
查看完整版本: 请问这段代码哪里出错了