如何将 % 添加到 numpy 数组中的每个值?
Posted
技术标签:
【中文标题】如何将 % 添加到 numpy 数组中的每个值?【英文标题】:How could I add the % to each value in the numpy array? 【发布时间】:2017-09-30 22:49:01 【问题描述】:我有以下 numpy 数组:
arr= [[ 0. 0.1046225518 0. 0.8953774482 0. ]]
暂时我有
values= str(np.around([arr*100],decimals=2))
返回:
[[ 0. 10.46 0. 89.53 0. ]]
如果我 + %
到值,它会返回
[[ 0. 10.46 0. 89.53 0. ]]%
想要的输出是:
[[ 0. 10.46% 0. 89.53% 0. ]]
【问题讨论】:
你的输出应该是什么?一个 numpy 字符串数组,还是只是一个字符串? numpy 字符串数组,因为之后想转向数据框 相关:***.com/questions/35661968/… 【参考方案1】:由于您在评论中提到您想将其转换为数据框(我假设您的意思是 Pandas 数据框)...
import numpy as np
import pandas as pd
# Reproduce your numpy array
arr= np.array([[ 0.0, 0.1046225518, 0.0, 0.8953774482, 0.0]])
# Convert to 1-Column DataFrame of % Strings
# (use pd.Series() instead if you'd prefer this as a Pandas Series)
as_strings = pd.DataFrame(["0:.2f%".format(val * 100) for val in arr[0]])
# Assign column name
as_strings.columns = ['Numbers as Strings']
print(as_strings)
Numbers as Strings
0 0.00%
1 10.46%
2 0.00%
3 89.54%
4 0.00%
感谢this SO answer 提供了大部分关键代码行。
【讨论】:
【参考方案2】:如果您使用的是熊猫:
(pd.Series([ 0.0, 0.1046225518, 0.0, 0.8953774482, 0.0]) * 10).round(2).astype(str) + " %"
导致
0 0.0 %
1 1.05 %
2 0.0 %
3 8.95 %
4 0.0 %
dtype: object
【讨论】:
【参考方案3】:如果需要0
也可以解决:
where
+ mul
+ round
+ astype
arr = np.array([[0.,0.1046225518,0., 0.8953774482, 0.]])
#DataFrame by constructor
df = pd.DataFrame(arr.reshape(-1, len(arr)), columns=['A'])
#convert 0 to string also for avoid mixed types - floats and strings
df['B'] = df['A'].astype(str).where(df['A'] == 0,
df['A'].mul(100).round(2).astype(str).add('%'))
print (df)
A B
0 0.000000 0.0
1 0.104623 10.46%
2 0.000000 0.0
3 0.895377 89.54%
4 0.000000 0.0
【讨论】:
以上是关于如何将 % 添加到 numpy 数组中的每个值?的主要内容,如果未能解决你的问题,请参考以下文章
如何用生成器中的值填充 2D Python numpy 数组?
不用循环,python numpy 数组如何对每个元素进行操作?