[英]Applying a function to pandas dataframe
我正在尝试对pandas
dataframe
执行一些文本分析,但是我遇到了一些问题。 或者,也许我只是没有得到它... PS - 我是一个蟒蛇初学者 - 是的。
数据帧示例:
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
我正在尝试建立一个流程,如果'Document'或'Type'是一个数字或不是,做一些事情。
这是一个简单的函数,用于返回'Document'是否为数字(编辑以显示我如何在场上尝试一些if / then flow):
def fn(dfname):
if dfname['Document'].apply(str.isdigit):
dfname['Check'] = 'Y'
else:
dfname['Check'] = 'N'
现在,我apply
它应用于数据帧:
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
)。
值得注意的是,您可以使用str.contains
执行此操作(不使用apply,因此更有效):
In [11]: df['Document'].str.contains('^\d+$')
Out[11]:
0 False
1 True
2 False
3 True
4 True
5 False
Name: Document, dtype: bool
这里正则表达式^和$分别表示开始和结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.