在pandas中将字符串转换为小写

40

我有一个包含域名的数据:

 url          var1
www.CNN.com   xsd
www.Nbc.com   wer
www.BBc.com   xyz
www.fOX.com   zyx
....
数据是序列类型。我正在使用以下内容将url变量转换为小写:

数据是序列类型。我正在使用以下内容将url变量转换为小写:

df.apply(lambda x: x.astype(str).str.lower())

然而,它们仍然是一样的。

我做错了什么?

3个回答

53
df['url'] = df['url'].str.lower()

应该对这个系列进行操作,并将其替换为小写版本。


2
出现错误 `//anaconda/lib/python3.5/site-packages/ipykernel/main.py:3: SettingWithCopyWarning: 尝试在 DataFrame 的切片副本上设置值。 请改用 .loc[row_indexer,col_indexer] = value。请参阅文档:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy app.launch_new_instance()` - Feyzi Bagirov
@FeyziBagirov,我在尝试复制您的测试数据集时没有得到这个结果(也是Python 3.5)。您能否在问题中发布生成数据集的代码,以便我们有相同的输入? - David
@FeyziBagirov 你可以尝试 df['url'] = df.loc[:,'url'].str.lower(),但我同意David的看法,在这里是不必要的。 - Sergey Bushmanov
2
@FeyziBagirov:对我来说,像这样的语法 df.loc[:, 'url'] = df.loc[:, 'url'].str.lower() 最终起作用了。 - izkeros

10
为了将单个列转换,我们可以使用:
df.column_name.str.lower()

或者
df['column_name'].str.lower()

希望这可以帮到您!

9

我认为你需要将输出赋回,如果仅与列url一起工作,则最好省略apply

df = pd.DataFrame({'url': ['www.CNN.com', 'www.Nbc.com', 'www.BBc.com', 'www.fOX.com'], 
                   'var1': ['XSD', 'wer', 'xyz', 'zyx']})

print (df)
           url var1
0  www.CNN.com  XSD
1  www.Nbc.com  wer
2  www.BBc.com  xyz
3  www.fOX.com  zyx

#if types of column is str, astype is not necessary
df.url = df.url.astype(str).str.lower()
print (df)
           url var1
0  www.cnn.com  XSD
1  www.nbc.com  wer
2  www.bbc.com  xyz
3  www.fox.com  zyx

但是如果需要将df的所有列转换为小写字符串:

df = df.astype(str).apply(lambda x: x.str.lower())
print (df)
           url var1
0  www.cnn.com  xsd
1  www.nbc.com  wer
2  www.bbc.com  xyz
3  www.fox.com  zyx

第一个解决方案出现了错误`//anaconda/lib/python3.5/site-packages/pandas/core/generic.py:2701: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self[name] = value`,但第二个解决方案是可行的。 - Feyzi Bagirov
我认为问题在这一行的上方代码,您能分享上面2,3行吗? - jezrael
或者查看文档 - jezrael
我添加了测试样例,你有错误吗? - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接