我是Python新手,希望您能帮助我。
我有一个结构如下的字典:
inventory = {
"brand": ["bmw", "audi", "harley davidson"],
"type": ["car", "car", "motorcycle"],
"value": [100, 200, 150],
}
我想知道是否可以按品牌和类型过滤。
这是一种更python化的方式。没有外部库。如果您经常与数据打交道,那么熟悉函数式编程风格也很有好处。这是写幂等的一种简洁方式对数据的操作
import functools
inventory = {
"brand": ["bmw", "audi", "harley davidson"],
"type": ["car", "car", "motorcycle"],
"value": [100, 200, 150],
}
def is_car(i):
return inventory["type"][i] == 'car'
cars_total_value = functools.reduce(
lambda total, v: total + v[1] if is_car(v[0]) else total,
enumerate(inventory["value"]),
0
)
print('Cars total value: %.2f' % cars_total_value)
Pandas正迅速成为Python世界中最优秀的CSV解析和表格过滤包。我不会试图猜测您是如何读取CSV的,但是从字典开始,您可以这样做:
import pandas as pd
inventory = {
"brand": ["bmw", "audi", "harley davidson"],
"type": ["car", "car", "motorcycle"],
"value": [100, 200, 150],
}
df = pd.DataFrame(inventory)
df.query('type == "car"')
打印
brand type value
0 bmw car 100
1 audi car 200
在将来,考虑使用pd.read_csv
直接从CSV文件创建一个数据帧。
common
car_sum_res = 0
for index, t in enumerate(inventory['type']):
if t == 'car':
car_sum_res += inventory['value'][index]
print(car_sum_res)
熊猫import pandas as pd
inventory = {
"brand": ["bmw", "audi", "harley davidson"],
"type": ["car", "car", "motorcycle"],
"value": [100, 200, 150],
}
df = pd.DataFrame(inventory)
car_sum_res = df.loc[df['type'] == 'car', 'value'].sum()
print(car_sum_res)
您可能想要查看pandas以方便地操作数据框架。
import pandas as pd
inventory = {
"brand": ["bmw", "audi", "harley davidson"],
"type": ["car", "car", "motorcycle"],
"value": [100, 200, 150],
}
df = pd.DataFrame.from_dict(inventory)
print(df)
[Output]
brand type value
0 bmw car 100
1 audi car 200
2 harley davidson motorcycle 150
在数据框架中,操作数据很容易,但是您可能需要研究特定的函数。
df['value'].sum()
450
df['value'].where(df['type'] == 'car').sum().astype(int)
300
(你可能需要做一些类型转换来得到你想要的结果)
作为一个额外的好处,如果你的数据是在Excel电子表格中,pandas可以直接读取它:
df = pd.read_excel('myfile.xlsx')
(这是个简单的例子;熊猫有很多选择