我正在尝试对 pandas
dataframe
执行一些文本分析,但在流程上遇到了一些问题。或者,也许我只是不明白... PS - 我是 Python 初学者。
数据框示例:
df = pd.DataFrame({'Document' : ['a','1','a', '6','7','N'], 'Type' : ['7', 'E', 'Y', '6', 'C', '9']})
Document Type
0 a 7
1 1 E
2 a Y
3 6 6
4 7 C
5 N 9
我正在尝试构建一个流程,如果“文档”或“类型”是否为数字,则执行某些操作。
这是一个简单的函数,用于返回“文档”是否为数字(经过编辑以显示我如何在字段上尝试一些 if/then 流程):
def fn(dfname):
if dfname['Document'].apply(str.isdigit):
dfname['Check'] = 'Y'
else:
dfname['Check'] = 'N'
现在,我将它应用
到数据框:
df.apply(fn(df), axis=0)
我得到了这个错误:
TypeError: ("'NoneType' object is not callable", u'occurred at index Document')
从错误消息来看,我似乎没有正确处理索引。谁能看出我哪里出错了?
最后 - 这可能与问题有关,也可能无关,但我真的很困惑 indexes
在 pandas
中的工作方式。我想我遇到的索引问题比其他任何问题都多。
最佳答案
你很接近。
关于 apply 你必须意识到的一点是你需要编写对标量值进行操作并返回你想要的结果的函数。考虑到这一点:
import pandas as pd
df = pd.DataFrame({'Document' : ['a','1','a', '6','7','N'], 'Type' : ['7', 'E', 'Y', '6', 'C', '9']})
def fn(val):
if str(val).isdigit():
return 'Y'
else:
return 'N'
df['check'] = df['Document'].apply(fn)
给我:
Document Type check
0 a 7 N
1 1 E Y
2 a Y N
3 6 6 Y
4 7 C Y
5 N 9 N
编辑:
只是想澄清一下,当在系列上使用 apply
时,您应该编写接受标量值的函数。但是,当在 DataFrame 上使用 apply
时,函数应该接受完整的列(当 axis=0
-- 默认值时)或完整的行(当 axis= 1
).
关于python - 将函数应用于 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269599/