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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |