【问题标题】:Python function returning only first value of a column dataPython函数仅返回列数据的第一个值
【发布时间】:2019-11-14 12:40:42
【问题描述】:

我有这个函数从文件中读取学校名称,但它只返回第一个学校名称。 我该怎么做才能使它返回所有名称,但是如果我使用 print (sch) 它会打印所有名称。谢谢

def school():
    schools_from_csv = pd.read_csv("School_data.csv", engine='python')
    cht = school_from_csv.school_name.str.strip()
    for sch in cht:
        return sch
        #prints(sch)

    return None

college=school()

【问题讨论】:

  • 你有什么循环?只需在创建后返回 cht
  • 所有名字都已经在 cht 中了,所以直接返回

标签: python function csv


【解决方案1】:

由于你使用了return,循环会在找到cht中的第一个元素时终止。

要获取整个列表,可以直接返回cht。

def school():
    schools_from_csv = pd.read_csv("School_data.csv", engine='python')
    cht = school_from_csv.school_name.str.strip()
    return cht

college=school()

或者如果你想让函数一个一个生成值,你可以使用生成器并将for循环更改为。

for sch in cht:
     yield sch

您可以阅读有关生成器的更多信息here

【讨论】:

  • 感谢您的快速响应。我也注意到了。我实际上正在将参数返回给另一个函数,我怎样才能让它继续循环到最后
  • 循环遍历cht 并将项目附加到sch_list 有什么意义。为什么不直接返回cht
  • 您可以将每个元素添加到新列表中,并在最后返回列表,就像我所做的那样。
  • @banji 最后的“继续循环”是什么意思?
  • @ChrisDoyle 是的。我已经改变了。您可以使用生成器循环并一次获取一个值。
【解决方案2】:

如果将return 替换为yield,则可以使用generator

def school():
    schools_from_csv = pd.read_csv("School_data.csv", engine='python')
    for sch in schools_from_csv:
        yield sch.school_name.str.strip()

    return None

college = school()
for col in college:
    print(col)

或者在for循环之后返回列表

def school():
    schools = []
    schools_from_csv = pd.read_csv("School_data.csv", engine='python')
    for sch in schools_from_csv:
        schools.append(sch.school_name.str.strip())

    return schools

您似乎还想循环使用schools_from_csv,而不是cht

【讨论】:

  • list(cht) 不会创建您在 schools 中创建的相同列表吗?
  • @Aryerez 是的,假设循环中不需要更多操作。
  • 我遇到的错误'generator object Entity_name at 0x10847230'
  • 我想使用 school_from_csv 中的 school_name 列进行循环
  • @banji 你从哪里得到的?
【解决方案3】:

@ChrisDoyle 分享的这段代码解决了我的问题:

def school():
    schools_from_csv = pd.read_csv("School_data.csv", engine='python')
    cht=schools_from_csv.school_name.str.strip().tolist()
    return cht 

school()

【讨论】:

    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2023-03-19
    • 2020-11-20
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多