Python 代码未显示所需的输出但继续运行

Posted

技术标签:

【中文标题】Python 代码未显示所需的输出但继续运行【英文标题】:Python code does not show the desired output but keeps running 【发布时间】:2021-10-31 05:23:39 【问题描述】:

我正在学习 Laura Igual 的《数据科学导论》一书。

每当我尝试执行此代码时,我的 jupyter 笔记本都会一直显示“[*]”,但从未显示所需的输出。甚至我的笔记本电脑也开始变慢并变得不稳定。该文件是一个包含 26 列和 10000 行的 CSV 文件。是不是文件太大了?

import pandas as pd
import numpy as np


file_name = r"ACCIDENTS_GU_BCN_2013.csv"

file = open(file_name, "r")

data = pd.read_csv(file)

data['Date']= data[u'Dia de mes'].apply(lambda x: str(x))+'-'+
                    data[u'Mes de any'].apply(lambda x: str(x))

data['Date'] = pd.to_datetime(data['Date'])
accidents = data.groupby(['Date']).size()

print(accidents.mean())

【问题讨论】:

【参考方案1】:

最好的应用是完全不应用。使用矢量化代码:

data['Date'] = data['Dia de mes'].astype('str') + '-' data['Mes de any'].astype('str')

您也可以将 u 前缀放到字符串中。它们在 Python 2 中是必需的,表示 Unicode 字符串。 Python 3 使它们变得多余,因为默认情况下所有字符串都是 Unicode。


什么是矢量化代码?

简单地说,向量化代码是自动将操作映射到数组的每个元素的代码。假设您有一个数字列表,并且您想为每个元素加 1:

# Regular Python
a_list = [1, 2, 3, 4]

for i in range(len(a_list)):
    a_list[i] += 1


# Vectorized code
import numppy as np

an_array = np.array([1, 2, 3, 4])
an_array += 1

除了更简洁之外,向量化代码对于长数组也快很多,因为它使用高度优化的 C 循环而不是原生 Python 循环。 Python 并不是一种以其性能而闻名的语言。

矢量化代码在 pandas / numpy 中无处不在。了解如何有效地使用它们。

【讨论】:

【参考方案2】:

我没有重现您的错误的数据,但您正在应用方法中运行另一个应用方法。这意味着对于每一行,每隔一行运行另一种方法。这意味着像 10000x10000 次迭代,这是巨大的。

代替这一行:

data['Date']= data[u'Dia de mes'].apply(lambda x: str(x)+'-'+
                    data[u'Mes de any'].apply(lambda x: str(x)))

你可以这样做:

data['Date'] = data.apply(lambda row: str(row[u'Dia de mes'])+'-'+str(row[u'Mes de any']), axis=1)

它只将 lambda 函数应用于所有行一次。

【讨论】:

以上是关于Python 代码未显示所需的输出但继续运行的主要内容,如果未能解决你的问题,请参考以下文章

MapKit - 找到路线但未显示

通过 xsl 将 XML 转换为 HTML 会导致以下问题:xsl 中的关键函数未提供所需的输出

在 Windows 批处理脚本的 for 循环中未通过“查找”命令获得所需的输出

Python:兼容性所需的未使用参数。如何避免皮林特抱怨它

webpack 包中所需的模块未定义

需要帮助来修改JS代码以实现所需的输出