Python 代码未显示所需的输出但保持 运行

Python code does not show the desired output but keeps running

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

每当我尝试执行此代码时,我的 jupyter notebook 一直显示“[*]”,但从未显示所需的输出。甚至我的笔记本电脑也开始变慢并变得不稳定。该文件是一个包含 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())

我没有重现您的错误的数据,但您是 运行 应用方法中的另一个应用方法。这意味着对于每一行,另一种方法是 运行 每隔一行。这意味着大约 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 函数一次。

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

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 中无处不在。了解如何有效地使用它们。