【问题标题】:Python Pandas: creating a dataframe using a function for one of the fieldsPython Pandas:使用其中一个字段的函数创建数据框
【发布时间】:2017-04-26 04:46:46
【问题描述】:

我正在尝试创建一个数据框,其中一个字段是使用函数计算的。为此,我使用以下代码:

import pandas as pd

def didSurvive(sex):
    return int(sex == "female")


titanic_df = pd.read_csv("test.csv")
submission = pd.DataFrame({
    "PassengerId": titanic_df["PassengerId"],
    "Survived": didSurvive(titanic_df["Sex"])
})
submission.to_csv('titanic-predictions.csv', index=False)

当我运行此代码时,我收到以下错误:

D:\Documents\kaggle\titanic>python predictor.py
文件“predictor.py”,第 3 行
def didSurvive() {
^
SyntaxError: 无效语法
D:\Documents\kaggle\titanic>python predictor.py
D:\Documents\kaggle\titanic>python predictor.py
D:\Documents\kaggle\titanic>python predictor.py
回溯(最近一次通话最后一次):
文件“predictor.py”,第 10 行,在
“幸存者”:didSurvive(titanic_df["Sex"])
文件“predictor.py”,第 4 行,在 didSurvive
返回 int(sex == "女性")
文件“C:\Python34\lib\site-packages\pandas\core\series.py”,第 92 行, 在包装中
"{0}".format(str(converter)))
TypeError:无法将系列转换为
D:\Documents\kaggle\titanic>

我认为正在发生的事情是我试图在一系列布尔值而不是单个布尔值上运行 int()。我该如何解决这个问题?

【问题讨论】:

    标签: python pandas kaggle


    【解决方案1】:

    要转换Series的数据类型,可以使用astype()函数,应该可以:

    def didSurvive(sex):
        return (sex == "female").astype(int)
    

    【讨论】:

    • 很好用.... 使用 int() 有什么问题,为什么 .astype() 有效?
    • 如您所见,int() 函数接受一个数字或字符串并将其转换为整数。它是一个基本的 Python 函数,不以 Series 对象作为参数。 astype() 是 pandas 内置的类型转换函数。
    【解决方案2】:

    您还可以在从 csv 文件导入期间重新格式化数据

    titanic_df = pd.read_csv("test.csv", converters={'Sex':didSurvive})
    submission = pd.DataFrame(titanic_df, columns=['PassengerId', 'Sex'])
    

    【讨论】:

    • 在创建数据框时使用这种方法而不是调用函数有什么优势或劣势,就像我和 psidom 正在做的那样?
    猜你喜欢
    • 1970-01-01
    • 2020-08-23
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多