【发布时间】:2017-05-07 06:46:32
【问题描述】:
我有一个数据框 df,其中包含 ['metric_type', 'metric_value'] 列。对于每一行,我想确保我有一个名称等于 'metric_type' 的列,并且该列的值等于 'metric_value'。
我的一个问题是'metric_type' 有我想摆脱的虚假空间。
考虑数据框df:
df = pd.DataFrame([
['a ', 1],
[' b', 2],
[' c ', 3]
], columns=['metric_type', 'metric_value'])
print(df)
metric_type metric_value
0 a 1
1 b 2
2 c 3
注意'metric_type' 的每个值在不同的地方都有空格。
我创建了一个函数来使用apply,但它需要很长时间。
def assign_metric_vals(row):
row[row['metric_type'].replace(" ", "")] = row['metric_value']
return row
当我使用它时,我得到了这个:
a b c metric_type metric_value
0 1.0000 nan nan a 1
1 nan 2.00 nan b 2
2 nan nan 3.00 c 3
有没有更好(读作“更快”)的方法来完成同样的任务?
【问题讨论】:
-
apply本身就很慢。它基本上是一个 python-for-loop 的包装器。 -
无论如何,看起来你想要完成的任何事情都应该能够通过基本的
pandas分配来完成。你为什么不描述你想要完成的事情 -
如果这么简单,我就不会发布这个问题了。如果对我要完成的工作有误解,我深表歉意。有一列 metric_type 包含我转换为列的值。然后我需要将 metric_value 列的行分配给正确转换的 metric_type 列。
-
在底部添加了说明。不过还是谢谢。
-
df['metric_type'] = [x.strip() for x in df.metric_type]怎么样?