如果缺少值,如何将 pandas 数据框字符串列小写?

新手上路,请多包涵

以下代码不起作用。

 import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan],columns=['x'])
xLower = df["x"].map(lambda x: x.lower())

我应该如何调整它以获得 xLower = [‘one’,‘two’,np.nan] ?效率很重要,因为真实的数据框架是巨大的。

原文由 P.Escondido 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 323
2 个回答

使用 pandas 向量化字符串方法;如文档中所示:

这些方法自动排除缺失值/NA 值

.str.lower() 是那里的第一个例子;

 >>> df['x'].str.lower()
0    one
1    two
2    NaN
Name: x, dtype: object

原文由 behzad.nouri 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一种可能的解决方案是,如果该列不仅有字符串,还有数字,则使用 astype(str).str.lower()to_string(na_rep='') 因为否则,假设数字不是字符串,当降低时它将返回 NaN ,因此:

 import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan,2],columns=['x'])
xSecureLower = df['x'].to_string(na_rep='').lower()
xLower = df['x'].str.lower()

那么我们有:

 >>> xSecureLower
0    one
1    two
2
3      2
Name: x, dtype: object

并不是

>>> xLower
0    one
1    two
2    NaN
3    NaN
Name: x, dtype: object


编辑:

如果你不想丢失 NaN,那么使用 map 会更好,(来自@wojciech-walczak 和@cs95 评论)它看起来像这样

xSecureLower = df['x'].map(lambda x: x.lower() if isinstance(x,str) else x)

原文由 Mike W 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题