pandas - 如何替换python中列名中的瑞典字符ä、å、ö?
问题描述
我有一个数据框,其中一些列名具有瑞典字符(ö、ä、å)。我想用简单的 o,a,a 替换这些字符。
我试图将列名转换为 str 并替换字符,它可以工作,但是如果我想将 str 分配回列名,它就会变得复杂,即,需要多个操作,这使得它变得复杂。
我尝试了以下代码,它将列名称中的瑞典字符替换为英文字母,并将结果作为 str 返回。
from unidecode import unidecode
unicodedata.normalize('NFKD',str(df.columns).decode('utf-8')).encode('ascii', 'ignore')
有没有办法将返回的 str 用作数据框的列名?如果没有,那么有没有更好的方法来替换列名中的瑞典字符?
解决方案
对我来说,首先进行标准化,然后编码为 ascii,最后解码为utf-8
:
df = pd.DataFrame(columns=['aä','åa','oö'])
df.columns = (df.columns.str.normalize('NFKD')
.str.encode('ascii', errors='ignore')
.to_series()
.str.decode('utf-8'))
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []
map
具有或列表理解的另一种解决方案:
import unicodedata
f = lambda x: unicodedata.normalize('NFKD', x).encode('ascii', 'ignore').decode('utf-8')
df.columns = df.columns.map(f)
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []
import unicodedata
df.columns = [unicodedata.normalize('NFKD', x).encode('ascii', 'ignore').decode('utf-8')
for x in df.columns]
print (df)
Empty DataFrame
Columns: [aa, aa, oo]
Index: []
推荐阅读
- postgresql - 在 postgres 列中查找任何数组
- mysql - MySQL 根据该随机值更新具有随机值和条件值的 2 列
- r - 如何找到相似字符串之间的差异?
- shell - 我在自己安装了 6.7 版本后安装了 5.1.6-1 dse cassandra
- r - 在R中使用download.file之前如何检查url中是否存在文件
- python-3.x - 将时间戳转换为日期应用于 Python 中的多个列
- c++ - 无法使用 Qt Creator 在 Windows 中构建 yaml-cpp
- javascript - 上传多个文件并显示进度条
- angular - 当以角度禁用表格中的按钮时,下一行按钮会随着数组长度的变化而变化
- javascript - ASP.NET Web API 中的表单