Pandas DataFrame重命名列失败且赋值后返回NoneType问题求助
Pandas DataFrame重命名列失败且赋值后返回NoneType问题求助
嗨,我看到你在给Pandas DataFrame重命名列的时候遇到了两个头疼的问题,这就帮你拆解下原因和对应的解决办法~
问题1:rename()方法没生效的原因
你第一次调用general.rename({'Species': 'Common Name'}, inplace=True)时,默认情况下rename()是针对行索引做修改的,根本没去碰列名!所以必须明确告诉Pandas你要修改的是列,有两种简单的方式:
- 直接指定
columns参数(最推荐,可读性最强):general.rename(columns={'Species': 'Common Name'}, inplace=True) - 或者指定
axis=1(代表操作的是列轴):general.rename({'Species': 'Common Name'}, axis=1, inplace=True)
问题2:赋值后返回NoneType的原因
当你使用inplace=True参数时,rename()会直接在原DataFrame上完成修改,并且返回None。这时候你如果把它赋值给general,就相当于把None塞进了这个变量里,后续自然会报错TypeError: 'NoneType' object is not subscriptable。
解决这个问题也有两种思路:
- 用
inplace=True时,不要给原变量赋值:general = pd.read_csv('july_4/general.csv', usecols=['Species', 'Count']) # 直接修改原DataFrame,不用赋值 general.rename(columns={'Species': 'Common Name'}, inplace=True) # 直接用general就行,列名已经改好了 print(general) - 不用
inplace=True,把返回的新DataFrame赋值给变量:general = pd.read_csv('july_4/general.csv', usecols=['Species', 'Count']) # 接收rename返回的新DataFrame general = general.rename(columns={'Species': 'Common Name'}) print(general)
按照上面的方法修改后,你的DataFrame列名应该就能顺利从Species改成Common Name啦~
备注:内容来源于stack exchange,提问作者digitalwaterfall
相关产品推荐
相关产品推荐

