为熊猫数据框的每一行替换一列中的字符串

时间:2020-06-24 22:36:04

标签: python pandas string dataframe

编辑:我必须将此部分添加到我的原始问题中,因为它是相关的。

我有一个框架,该框架在名为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/','')

数据框看起来不错,为什么会出现此错误?这样做的“正确”方法是什么?

3 个答案:

答案 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)