Python 使用Pandas从dataframe的所有项中删除字符串

Python 使用Pandas从dataframe的所有项中删除字符串,python,string,pandas,replace,split,Python,String,Pandas,Replace,Split,我有一个数据帧df如下: dic = {'A':['pap','cdf\nsdc','ert','dgx','kll\nsrw','sdq'], 'B':[1,4,6,2,5,6], 'C':['123\n12','34','55','321\n88','09','45']} df = pd.DataFrame(dic) 我的目标是从所有列中删除由\n和它前面的任何if构成的字符串:abc\ndef-->def 通过使用以下代码行,我能够实现我的目标: for inde

我有一个数据帧
df
如下:

dic = {'A':['pap','cdf\nsdc','ert','dgx','kll\nsrw','sdq'],
      'B':[1,4,6,2,5,6],
      'C':['123\n12','34','55','321\n88','09','45']}
df = pd.DataFrame(dic)
我的目标是从所有列中删除由
\n
和它前面的任何if构成的字符串:
abc\ndef
-->
def

通过使用以下代码行,我能够实现我的目标:

for index,row in df.iterrows():
    df['A'][index]=row['A'].split('\n')[-1]
    df['C'][index]=row['C'].split('\n')[-1]
然而,我希望有一个更聪明和更紧凑的方式来实现这样的结果。你能推荐一种比我的更优雅的方式吗(也许是一种单行线)

注意:列
B
是浮动的

您可以在相关列上使用矢量化,如果您有更复杂的示例,则需要根据数据类型筛选感兴趣的列:

In [135]:
df['A'] = df['A'].str.split('\n').str[-1]
df['C'] = df['C'].str.split('\n').str[-1]
df

Out[135]:
     A  B   C
0  pap  1  12
1  sdc  4  34
2  ert  6  55
3  dgx  2  88
4  srw  5  09
5  sdq  6  45
动态方法:

In [142]:
str_cols = df.select_dtypes([np.object]).columns
str_cols

Out[142]:
Index(['A', 'C'], dtype='object')

In [143]:    
for col in str_cols:
    df[col] = df[col].str.split('\n').str[-1]
​
df

Out[143]:
     A  B   C
0  pap  1  12
1  sdc  4  34
2  ert  6  55
3  dgx  2  88
4  srw  5  09
5  sdq  6  45