数据框:
import pandas as pd
import numpy as np
data = [['Girev', 'Andrey', 'ВИП', 2815, 29, 58, 6358, 'Moscow', 'Xiaomi'],
['Bykin', 'Stas', 'Все за 300', 3634, 37, 78, 602, 'Kazan', 'Samsung'],
['Ivanov', 'Alex', 'Всё за 800', 410, 47, 81, 3582, 'Moscow', 'Huawei'],
['Andreev', 'Sergey', 'Всё за 500', 1981, 75, 98, 5442, 'Kazan', 'Apple'],
['Girev', 'Stas', 'Всё за 800', 4969, 43, 61, 8510, 'Moscow', 'Samsung'],
['Bykin', 'Andrey', 'Всё за 500', 4308, 49, 39, 2525, 'Moscow', 'Xiaomi'],
['Kozlov', 'Igor', 'Всё за 800', 300, 60, 31, 8543, 'Yakutsk', 'Samsung'],
['Girev', 'Alex', 'Промо', 4199, 47, 90, 3925, 'Kazan', 'Apple'],
['Petrov', 'Nikolay', 'ВИП', 4810, 72, 88, 7188, 'Moscow', 'Apple'],
['Andreev', 'Sergey', 'Всё за 800', 4118, 52, 53, 419, 'Yakutsk', 'Apple'],
['Smolov', 'Stas', 'Промо', 1991, 28, 67, 5016, 'Kazan', 'Xiaomi'],
['Girev', 'Igor', 'Корпоративный', 1430, 69, 19, 9520, 'Yakutsk', 'Samsung'],
['Kozlov', 'Andrey', 'Корпоративный', 113, 71, 82, 2785, 'Kazan', 'Apple'],
['Ivanov', 'Sergey', 'Промо', 3394, 39, 12, 2718, 'Yakutsk', 'Xiaomi'],
['Smolov', 'Sergey', 'Всё за 250 (архив)', 3493, 32, 6, 8959, 'Yakutsk', 'Huawei'],
['Kozlov', 'Stas', 'Всё за 800', 4565, 59, 82, 3168, 'Moscow', 'Apple'],
['Vlasov', 'Andrey', 'Всё за 800', 3192, 29, 74, 2852, 'Yakutsk', 'Xiaomi'],
['Smolov', 'Alex', 'Корпоративный', 3764, 71, 22, 2768, 'Moscow', 'Huawei'],
['Vlasov', 'Sergey', 'Всё за 800', 3816, 28, 35, 5734, 'Vladivostok', 'Apple'],
['Bykin', 'Alex', 'Промо', 817, 65, 34, 2131, 'Vladivostok', 'Samsung'],
['Andreev', 'Nikolay', 'Всё за 500', 385, 49, 62, 1815, 'Kazan', 'Xiaomi'],
['Bykin', 'Igor', 'Всё за 500', 2642, 38, 11, 3787, 'Moscow', 'Xiaomi'],
['Girev', 'Sergey', 'Все за 300', 4230, 62, 68, 5512, 'Vladivostok', 'Samsung'],
['Bykin', 'Sergey', 'Всё за 800', 4100, 48, 39, 227, 'Moscow', 'Xiaomi'],
['Girev', 'Stas', 'Все за 300', 3371, 53, 24, 7946, 'Kazan', 'Apple'],
['Smolov', 'Sergey', 'Корпоративный', 3577, 70, 71, 8847, 'Yakutsk', 'Huawei'],
['Mezov', 'Nikolay', 'Всё за 250 (архив)', 2742, 28, 19, 7115, 'Yakutsk', 'Huawei'],
['Smolov', 'Stas', 'Всё за 500', 2644, 41, 33, 8341, 'Moscow', 'Xiaomi'],
['Vlasov', 'Andrey', 'Всё за 500', 4725, 26, 93, 9441, 'Vladivostok', 'Xiaomi'],
['Ivanov', 'Nikolay', 'Всё за 500', 2785, 41, 5, 2901, 'Moscow', 'Samsung']]
df = pd.DataFrame(data, columns = ['surname', 'name', 'tarif', 'balance', 'age', 'sms', 'voice', 'city', 'phone'])
需要添加到列表中的"A"
时间'age'
小于25
。如果更多25
年数,则添加"B"
。
vacant=[]
for i in range(len(df)):
if df["age"] < 25:
vacant.append("A")
elif df["age"] >25:
vacant.append("B")
ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
通常这样的错误发生在应用AND或OR时,我立即不明白是什么原因。请帮帮我。最好使用循环来实现
发生错误的原因是
df["age"]
- 是一个完整的系列(pd.Series),即 在本例中,帧中的一列年龄值以及该列中的条件df["age"]<25
形成了一个包含 30 个值的布尔数组。解释器非常正确地反对:“该系列的真实值是不明确的”,并要求应用一些函数可以将这 30 个值变为 1 - True 或 False。该错误也是由于框架内的数据处理不正确引起的 - 在循环中,您不会迭代行,而是每次检查
age
原始框架中的列。Pandas
一般来说,它们几乎从不明确地在循环中使用,因为 力学Pandas
针对矢量计算进行了锐化。例如,在这种情况下(以及在更复杂的情况下,例如,当您需要定义不是 2 个,而是 5-10 个或更多类别时),使用分类数据会很方便:
我们在其中定义范围和标签的边界。那些。0到25(不含)的范围将被标记为A,25到200的范围将被标记为B。您可以制作更多范围和标签。
如果我们讨论如何使您的代码示例正常工作(这对于 来说效率很低
Pandas
),您可以这样做:或者
您徒劳地使用循环和向量访问系列。显然,您不完全了解数据框列访问的工作原理。对于你的情况,只需执行以下操作:
然而,你的例子并不具有指示性——你的年龄值不小于25。而且,正如你在评论中正确指出的那样,你需要处理年龄为25时的情况。