2015-08-25 45 views
0

更换特定字符串我有这样一个数据帧:在数据帧

 Basic Stats Min  Max  Mean  Stdev Num Eigenvalue 
0  Band 1 0.428944 0.843916 0.689923 0.052534 1 0.229509 
1  Band 10 -0.000000 0.689320 0.513170 0.048885 2 0.119217 

而且我想LG69

LG68Band 10更换Band 1我曾尝试:

df=df.replace({'Band 1': 'LG68', 'Band 10': 'LG69'}, regex=True) 

但这返回:

 Basic Stats Min  Max  Mean  Stdev Num Eigenvalue 
0  LG68  0.428944 0.843916 0.689923 0.052534 1 0.229509 
1  LG680 -0.000000 0.689320 0.513170 0.048885 2 0.119217 

,因为频段10还包含频段1。

我也曾尝试:

df=df.T 
df=df.rename(columns={'Band 1':'LG68', 'Band10': 'LG69'}) 

但这种失败默默(没有名字改变的话),可能是因为我没有频段1和10列名,但不是实际的行?

回答

1

您可以通过添加一个$Band 1末固定的正则表达式,使语句看起来像

df=df.replace({'Band 1$': 'LG68', 'Band 10': 'LG69'}, regex=True) 

$行的末尾匹配,使Band 1$将只匹配时Band 1后面跟着字符串或换行符的结尾。您也可以使用\Z,它只匹配字符串的末尾。

1

也许尝试使用map函数与dict来描述映射关系。

df['Basic Stats'] = df['Basic Stats'].map({'Band 1': 'LG68', 'Band 10': 'LG69'}) 
df 

    Basic Stats  Min  Max Mean Stdev Num Eigenvalue 
0  LG68 0.4289 0.8439 0.6899 0.0525 1  0.2295 
1  LG69 -0.0000 0.6893 0.5132 0.0489 2  0.1192 
+0

将'Basic Stats'内的所有值作为'NaN'返回。 –

+0

@StefanoPotter你可以在原始数据框中显示'df ['Basic Stats']。values [:5]'的结果吗?产生的'NaN'通常是'dict'中的键与'Basic Stats'列中的值不匹配的结果。 –

+0

'['乐队1'乐队2'乐队3'乐队4'乐队5'] ['乐队1'乐队2'乐队3'乐队4'乐队5']我简化了原帖,有80集乐队编号1-80我正在为 –

1

你正在设置正则表达式为真,所以你应该能够使用正则表达式。添加$以匹配字符串的末尾。

df=df.replace({'Band 1$': 'LG68', 'Band 10$': 'LG69'}, regex=True)