在熊猫中将字符串转换为小写[重复]
Posted
技术标签:
【中文标题】在熊猫中将字符串转换为小写[重复]【英文标题】:Converting strings to a lower case in pandas [duplicate] 【发布时间】:2017-08-02 16:43:38 【问题描述】:我有一个包含域名的数据:
url var1
www.CNN.com xsd
www.Nbc.com wer
www.BBc.com xyz
www.fOX.com zyx
....
数据是系列类型。我正在使用以下内容将 url 变量转换为小写:
df.apply(lambda x: x.astype(str).str.lower())
但是,它们保持不变。
我做错了什么?
【问题讨论】:
【参考方案1】:要转换我们可以使用的单列,
df.column_name.str.lower()
或
df['column_name'].str.lower()
希望这会有所帮助!
【讨论】:
【参考方案2】:我认为您需要重新分配输出,如果仅适用于列 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
的所有列转换为lowercase string
s:
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 instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self[name] = value
第二个解决方案虽然有效
我认为问题出在这一行上面的代码中,你能分享上面的 2,3 行吗?
或者检查docs
我添加了测试样本,你有错误吗?【参考方案3】:
df['url'] = df['url'].str.lower()
应该对系列进行操作,替换为小写版本。
【讨论】:
收到错误//anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:3: 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 instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy app.launch_new_instance()
@FeyziBagirov 我没有在我的测试数据集中得到那个我试图镜像你的数据集(也是 python 3.5)。您能否在您的问题中发布代码以生成数据集,以便我们拥有相同的输入?
@FeyziBagirov 你可以试试df['url'] = df.loc[:,'url'].str.lower()
但我同意大卫的观点,这里没有必要
@FeyziBagirov:对我来说,语法如下:df.loc[:, 'url'] = df.loc[:, 'url'].str.lower()
终于奏效了。以上是关于在熊猫中将字符串转换为小写[重复]的主要内容,如果未能解决你的问题,请参考以下文章