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