繁体   English   中英

将函数应用于pandas数据帧

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM