python - 将函数应用于 Pandas 数据框

标签 python pandas

我正在尝试对 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')

从错误消息来看,我似乎没有正确处理索引。谁能看出我哪里出错了?

最后 - 这可能与问题有关,也可能无关,但我真的很困惑 indexespandas 中的工作方式。我想我遇到的索引问题比其他任何问题都多。

最佳答案

你很接近。

关于 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/

相关文章:

python - flask-restful 嵌套资源

javascript - Python selenium 如何使用参数在 JavaScript 元素上执行execute_script

Python:Json 使用命名元组、日期对嵌套数据结构进行编码

python - Matplotlib:使用日期时间轴绘图时如何跳过一系列小时?

python - 通过 3D x、y、z 散点图数据拟合一条线

python - 根据索引分配系列值

python - Eclipse IDE Pydev 导入错误

python - 增加列表理解中多个 for 循环的时间

当系列包含缺失值时,pandas Series.min() 不返回任何内容

python - 在 Pandas 数据框替换功能中使用正则表达式匹配组