用值替换整个数据框中的字符串

Posted

技术标签:

【中文标题】用值替换整个数据框中的字符串【英文标题】:replace a string in entire dataframe from excel with value 【发布时间】:2021-02-22 12:00:28 【问题描述】:

我有这样的excel数据

dminerals=pd.read_excel(datafile)
print(dminerals.head(5))

然后我用这个脚本用 for 循环替换 'Tr' 和 NaN 值

for key, value in dminerals.iteritems(): 
    dminerals[key] = dminerals[key].replace(to_replace='Tr', value=int(1))
    dminerals[key] = dminerals[key].replace(to_replace=np.nan, value=int(0))

然后再次打印,它似乎工作并打印数据帧类型。但它显示对象数据类型。

print(dminerals.head(5))
print(dminerals['C'].dtypes)

我尝试使用此 .astype 将 ['C'] 列之一更改为整数,但结果是值错误

dminerals['C'].astype(int)
ValueError: invalid literal for int() with base 10: 'tr'

我以为我已经将数据框中的“Tr”更改为整数值。在上面的过程中有什么我想念的吗?请帮忙,提前谢谢!

【问题讨论】:

【参考方案1】:

您将 Tr 替换为 1,但是有一个 tr 未被替换(这就是您 ValueError 所说的内容。记住 python 区分大小写。此外,使用 for 循环效率极低,您可能想尝试使用以下代码行:

dminerales = dminerales.replace('Tr':1,'tr':1).fillna(0)

我正在使用fillna(),在这种情况下,用指定值0 填充空值也更好,而不是使用repalce。

【讨论】:

以上是关于用值替换整个数据框中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何用数据框中的字符串值替换 int 值[重复]

使用部分字符串匹配将数据框中的列替换为另一个数据框列

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

如何在 PySpark 中为数据框中的所有列替换字符串值与 NULL?

替换与数据框中特定字符串匹配的值

有没有办法用数据框中的平均值替换范围数据(例如18-25)?