对比Dataframe与原生list的速度,Dataframe太慢了!!!

写一个创建一个Dataframe的python代码示例。

import pandas as pd

# 创建一个Dataframe
data = {'Name': ['John', 'Bob', 'Mallory', 'Alice'],
        'Location': ['New York', 'Paris', 'Berlin', 'London'],
        'Age': [24, 13, 53, 33]
       }
df = pd.DataFrame(data)
print (df)

调试代码时,可以使用Python自带的调试工具,例如print语句来查看代码的运行状态。也可以使用第三方调试工具,比如pdb、ipdb等来实时跟踪代码的执行过程。

修改上面的代码,计算代码的执行时间(以毫秒为单位)

使用Python标准库中的timeit模块,可以方便的计算代码的执行时间,比如:

import pandas as pd
import timeit
start = timeit.default_timer()

# 创建一个Dataframe
data = {'Name': ['John', 'Bob', 'Mallory', 'Alice'],
        'Location': ['New York', 'Paris', 'Berlin', 'London'],
        'Age': [24, 13, 53, 33]
       }
df = pd.DataFrame(data)

print (df)
end = timeit.default_timer()

print('代码执行时间:', (end - start)*1000, 'ms')

解释一下 timeit.default_timer()

timeit.default_timer() 是 Python 中 timeit 模块的一个函数,它可以返回当前时间的时间戳,以便用来计算代码的执行时间。

修改上面的代码,让创建的Dataframe里面有100个数据,并保留代码执行时间计算

import pandas as pd
import timeit
start = timeit.default_timer()

# 创建一个Dataframe
data = {'Name': ['John', 'Bob', 'Mallory', 'Alice']*25,
        'Location': ['New York', 'Paris', 'Berlin', 'London']*25,
        'Age': [24, 13, 53, 33]*25
       }
df = pd.DataFrame(data)

print (df)
end = timeit.default_timer()

print('代码执行时间:', (end - start)*1000, 'ms')

继续修改上面的代码,再创建一个list,list里面有dict,list里的数据与之前创建的Dataframe里的数据是一样的,也是100个数据。

import pandas as pd
import timeit
start = timeit.default_timer()

# 创建一个Dataframe
data = {'Name': ['John', 'Bob', 'Mallory', 'Alice']*25,
        'Location': ['New York', 'Paris', 'Berlin', 'London']*25,
        'Age': [24, 13, 53, 33]*25
       }
df = pd.DataFrame(data)

# 创建一个list
list_data = [{'Name': 'John','Location': 'New York','Age': 24},
             {'Name': 'Bob','Location': 'Paris','Age': 13},
             {'Name': 'Mallory','Location': 'Berlin','Age': 53},
             {'Name': 'Alice','Location': 'London','Age': 33}] * 25

print (df)
end = timeit.default_timer()

print('代码执行时间:', (end - start)*1000, 'ms')

找到上面代码变量data中,Name = John 的数据,代码应该怎么写?

可以使用df.loc函数,来找到data中Name = John的数据,例如:

# 找到data中Name = John的数据
john_data = df.loc[df['Name'] == 'John']
print(john_data)

找到上面代码变量list_data中,Name = John 的数据,代码应该怎么写?

可以使用list comprehension循环,来找到list_data中Name = John的数据,例如:

# 找到list_data中Name = John的数据
john_data = [data for data in list_data if data['Name'] == 'John']
print(john_data)

把这两段代码片段加入到完整的代码中,并分别统计这两段小代码,对比其执行时间

import pandas as pd
import timeit
start = timeit.default_timer()

# 创建一个Dataframe
data = {'Name': ['John', 'Bob', 'Mallory', 'Alice']*25,
        'Location': ['New York', 'Paris', 'Berlin', 'London']*25,
        'Age': [24, 13, 53, 33]*25
       }
df = pd.DataFrame(data)

# 创建一个list
list_data = [{'Name': 'John','Location': 'New York','Age': 24},
             {'Name': 'Bob','Location': 'Paris','Age': 13},
             {'Name': 'Mallory','Location': 'Berlin','Age': 53},
             {'Name': 'Alice','Location': 'London','Age': 33}] * 25

# 找到data中Name = John的数据
start_data = timeit.default_timer()
john_data = df.loc[df['Name'] == 'John']
end_data = timeit.default_timer()

# 找到list_data中Name = John的数据
start_list = timeit.default_timer()
john_list = [data for data in list_data if data['Name'] == 'John']
end_list = timeit.default_timer()

print(john_data)
print(john_list)
end = timeit.default_timer()

print('df找到Name = John的数据:', (end_data - start_data)*1000, 'ms')
print('list找到Name = John的数据:', (end_list - start_list)*1000, 'ms')
print('代码总执行时间:', (end - start)*1000, 'ms')

输出

df找到Name = John的数据: 5.7543089999999575 ms
list找到Name = John的数据: 0.009135999999965172 ms
代码总执行时间: 17.603628000000036 ms

!!!dataframe太慢了!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误通常是由于使用DataFrame构造函数时传递的参数不正确引起的。以下是一些可能导致这个错误的原因: 1. DataFrame构造函数的参数不正确。DataFrame构造函数需要传递一个数据对象,可以是numpy数组、字典、Series等,如果传递的不是这些对象,就会出现这个错误。 2. DataFrame构造函数的参数数量不正确。DataFrame构造函数需要传递至少一个参数,如果参数数量不正确,就会出现这个错误。 3. DataFrame构造函数中的数据类型不匹配。如果传递的数据类型不匹配,例如传递了一个包含不同数据类型的numpy数组,就会出现这个错误。 为了解决这个问题,可以检查传递给DataFrame构造函数的参数是否正确,并确保数据类型匹配。以下是一些示例代码,展示了如何正确使用DataFrame构造函数: ```python import pandas as pd import numpy as np # 示例1:传递一个numpy数组 arr = np.array([[1, 2], [3, 4]]) df = pd.DataFrame(arr) print(df) # 示例2:传递一个字典 data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'Age': [28, 34, 29, 42]} df = pd.DataFrame(data) print(df) # 示例3:传递一个Series s = pd.Series([1, 3, 5, np.nan, 6, 8]) df = pd.DataFrame(s, columns=['A']) print(df) ``` 以上示例代码分别展示了如何传递一个numpy数组、字典和Series来创建DataFrame对象。如果仍然出现错误,可以检查数据的类型和维度是否与DataFrame构造函数期望的一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值