加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 仅当列值为字符串时才将列值转换为小写

发布时间:2020-12-20 12:13:13 所属栏目:Python 来源:网络整理
导读:我在将列转换为小写时遇到了麻烦.它并不像以下那样简单: df['my_col'] = df['my_col'].str.lower() 因为我正在迭代很多数据帧,其中一些(但不是全部)在感兴趣的列中都有字符串和整数.如果像上面那样应用,这会导致较低的函数抛出异常: AttributeError: Can o
我在将列转换为小写时遇到了麻烦.它并不像以下那样简单:

df['my_col'] = df['my_col'].str.lower()

因为我正在迭代很多数据帧,其中一些(但不是全部)在感兴趣的列中都有字符串和整数.如果像上面那样应用,这会导致较低的函数抛出异常:

AttributeError: Can only use .str accessor with string values,which use np.object_ dtype in pandas

我不想强迫类型成为字符串,而是评估值是否为字符串,然后 – 如果是 – 将它们转换为小写,并且 – 如果它们不是字符串 – 将它们保持原样.我认为这会奏效:

df = df.apply(lambda x: x.lower() if(isinstance(x,str)) else x)

但它不起作用……可能是因为我忽略了一些明显的东西,但我看不出它是什么!

我的数据看起来像这样:

OS    Count
0          Microsoft Windows     3
1                   Mac OS X     4
2                      Linux     234
3    Don't have a preference     0
4  I prefer Windows and Unix     3
5                       Unix     2
6                        VMS     1
7         DOS or ZX Spectrum     2

解决方法

你的lambda函数中的测试不太正确,但你离真相并不远:

df.apply(lambda x: x.str.lower() if(x.dtype == 'object') else x)

使用数据框和输出:

df = pd.DataFrame(columns = ['OS','Count'])
df.OS = ["Microsoft Windows","Mac OS X","Linux","Don't have a preference",
      "I prefer Windows and Unix","Unix","VMS","DOS or ZX Spectrum"]
df.Count = [3,4,234,3,2,1,2]
df = df.apply(lambda x: x.str.lower() if(x.dtype == 'object') else x)
df

    OS                          Count
0   microsoft windows           3
1   mac os x                    4
2   linux                       234
3   don't have a preference     0
4   i prefer windows and unix   3
5   unix                        2
6   vms                         1
7   dos or zx spectrum          2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读