编辑:我必须将此部分添加到我的原始问题中,因为它是相关的。
我有一个框架,该框架在名为dfload
的名称列中包含许多不同的前缀。
我使用以下命令创建一个名为df
的切片。
df = dfload.loc[dfload['Name'].str.contains("testData/")]
原始问题从此处继续:
然后,我有以下名为df
的熊猫数据框,
name etc etc etc
0 testData/example1 etc ...
1 testData/example2 ...
2 testData/example3
3 testData/example4
...
我想在整个列中不使用任何内容替换字符串testData/
,所以看起来像这样
name etc etc etc
0 example1 etc ...
1 example2 ...
2 example3
3 example4
...
我使用了以下命令df['name'] = df['name'].str.replace('testData/','')
。
但是我得到这个错误,
<ipython-input-20-dae746394d2d>:1: 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: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df['name'] = df['name'].str.replace('testData/','')
数据框看起来不错,为什么会出现此错误?这样做的“正确”方法是什么?
答案 0 :(得分:2)
为避免收到警告,请像这样创建df
:
import pandas as pd
df = pd.DataFrame(dfload[dfload.name.str.contains('testdata/')])
指定它是一个数据帧而不是一个切片可能是阻止熊猫发出警告的原因
答案 1 :(得分:0)
使用此:
df.name = df.name.str.replace('testData/','',regex = True)
答案 2 :(得分:0)
您应该尝试使用lamda函数在每行上应用replace语句:
df["name"]= df.apply(lambda x: x['name'].replace('testData/',''), axis=1)