使用pandas的loc方法替换值时出现‘str’无‘loc’属性错误
问题分析与解决方案
嘿,我一眼就瞅出问题所在啦!你碰到的'str' has no attribute 'loc'错误,根源出在这行代码:
c_df = c_df.loc[c_df['Country'] == ('Korea, Rep.')] = 'South Korea'
这行代码犯了一个典型的赋值逻辑错误——你把两次赋值操作硬凑在了同一行,最终c_df被直接赋值成了字符串'South Korea',而不再是原来的DataFrame对象。当后续操作(哪怕是你现在代码里没写的)再尝试用.loc操作c_df时,自然会报错,因为字符串类型根本没有loc这个属性。
正确的修改方式
要修改DataFrame中特定行的Country列值,你只需要通过.loc精准定位后直接赋值就行,不需要把结果再重新赋值给c_df:
# 定位符合条件的行,修改Country列的值 c_df.loc[c_df['Country'] == 'Korea, Rep.', 'Country'] = 'South Korea'
这里的.loc用法是df.loc[行筛选条件, 目标列名] = 新值,能精准定位到需要修改的单元格,完全不会改变整个DataFrame的类型。
修正后的完整代码
import pandas as pd df = pd.read_excel("Energy Indicators.xls", header=None, footer=None) c_df = df.copy() c_df = c_df.iloc[18:245, 2:] c_df = c_df.rename(columns={2: 'Country', 3: 'Energy Supply', 4:'Energy Supply per Capita', 5:'% Renewable'}) c_df['Energy Supply'] = c_df['Energy Supply'].apply(lambda x: x*1000000) # 修正后的赋值语句 c_df.loc[c_df['Country'] == 'Korea, Rep.', 'Country'] = 'South Korea' print(c_df)
内容的提问来源于stack exchange,提问作者geojasm
相关产品推荐
相关产品推荐

