python - 在 pandas 中创建新列引发 AttributeError:(“'str' 对象没有属性 'str'”,'发生在索引 0')
问题描述
我有一个如下所示的数据框:
variable value
0 TrafficIntensity_end 217.0
1 TrafficIntensity_end+105 213.0
2 TrafficIntensity_end+120 204.0
3 TrafficIntensity_end+15 489.0
4 TrafficIntensity_end+30 479.0
5 TrafficIntensity_end+45 453.0
6 TrafficIntensity_end+60 387.0
7 TrafficIntensity_end+75 303.0
8 TrafficIntensity_end+90 221.0
9 pred_rf_end+15 545.0
10 pred_rf_end 244.0
11 pred_rf_end+30 448.0
12 pred_rf_end+45 408.0
13 pred_rf_end+60 363.0
14 pred_rf_end+75 305.0
15 pred_rf_end+90 199.0
16 pred_rf_end+105 181.0
17 pred_rf_end+120 163.0
我想根据['variable']
列中的字符串包含的内容创建一个新列。我有以下代码:
def classify(row):
if row['variable'].str.contains('TrafficIntensity'):
return 'Real Traffic Intensity'
elif row['variable'].str.contains('pred_rf_end'):
return 'Predicited Value'
a['category'] = a.apply(classify, axis=1)
但是,这给了我以下错误:
AttributeError: ("'str' object has no attribute 'str'", 'occurred at index 0')
为什么会发生这种情况,我该如何解决?谢谢!
解决方案
使用numpy.select
:
m1 = df['variable'].str.contains('TrafficIntensity')
m2 = df['variable'].str.contains('pred_rf_end')
a['category'] = np.select([m1, m2],
['Real Traffic Intensity','Predicited Value'],
a['variable'])
您通过in
语句测试标量的解决方案:
def classify(x):
if 'TrafficIntensity' in x:
return 'Real Traffic Intensity'
elif 'pred_rf_end' in x:
return 'Predicited Value'
else:
return x
a['category'] = a['variable'].apply(classify)
推荐阅读
- mysql - MySQL 在一个查询中同时选择 SUM 和同一列的一个特定行 - 最佳方式?
- node.js - 如何将每个用户输入传递给 Bing 拼写检查,然后将其发送到 LUIS 进行处理。(Nodejs SDK v3)?
- matplotlib - 多行地块和地块子行
- java - 使用 pdfbox 2.0.X jar 提取文本
- java - Java 数字格式异常
- android - 为什么 CardView 剪辑在 API 级别低于 21 时不起作用?
- parsing - 为什么左递归、非确定性或二义性文法不能是 LL(1)?
- php - 我应该在哪里放置用于从 Wordpress 站点将数据插入 MySql Server 的 php 代码
- css - css动画重复之间的延迟
- python - 在 requests.get 之后从 GitHub url 中逐批流式传输数据