我在将我的数据从数据帧转换为百分比格式并将其保持为浮点数时遇到了问题。
我准备了一个简单的代码,它反映了我实际项目中的代码:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,15,size=(10, 4)), columns=list('ABCD'))
print(df)
cols = df.columns
for col in cols:
df[col] = df[col].astype(float).map(lambda n: '{:.4%}'.format(n))
print(df)
print(df.dtypes)
在我的实际项目中,我只需要选择包含特定字符串的列,并对它们的值进行一些计算。最后,我必须将格式更改为带有4个小数位的百分比。即使我使用astype(float)
,我的值仍然是str
。因此,当我将dataframe保存到excel文件时,值被粘贴为文本而不是数字。此外,在从这个数据帧创建折线图时,我得到一个错误'unhashable type:'numpy.ndarray‘。
请建议如何成功地将数据转换为百分比格式,并将其保留为浮点型,以便准确粘贴到excel文件中,并使用matplotlib创建折线图。
非常感谢!
发布于 2020-10-16 21:05:13
我相信这是因为您在.astype(float)之后使用了.format。代码首先将值转换为浮点数,但是由于format是一个str函数,所以它被转换为具有4个小数位的字符串。您可以尝试执行以下操作:
df[col] = df[col].map(lambda n: '{:.4%}'.format(n)).astype(float)
或
您可以尝试在for循环中将代码行分成两部分:
df[col] = df[col].map(lambda n: '{:.4%}'.format(n))
df[col] = df[col].astype(float)
希望这能起作用!
https://stackoverflow.com/questions/64389558
复制相似问题