AttributeError: 'NoneType' object has no attribute 'append',列表list和dataframe使用append的返回值

  • 起因
  • 问题原因
  • 解决方案

1.起因
经常对dataframe进行操作,免不了添加操作。一般使用
df = df.append(df_save),没啥问题。
但对列表使用append时出现错误:

#错误示范
>>>list = []
>>>list = list.append('a')
>>>print(list)
AttributeError: 'NoneType' object has no attribute 'append'

错误码

AttributeError: ‘NoneType’ object has no attribute 'append‘

其实提示很清楚,NoneType格式没有append方法。但是很奇怪,原来空的dataframe也能添加啊,比如:

print(data)
>>>
        A   B    C
0       1   2  3.0
1       a   b  NaN
2  (1, 2)  ab  3.0

import pandas as pd
df = pd.DataFrame()
print(df)
>>>
Empty DataFrame
Columns: []
Index: []

df = df.append(data)
print(df)
>>>
        A   B    C
0       1   2  3.0
1       a   b  NaN
2  (1, 2)  ab  3.0

2.问题原因
在这篇文章中找到答案https://www.jianshu.com/p/42fd50c36a5c
原来是append方法用在dataframe和list上有不同的返回参数

>>>type(df.append(data))
 pandas.core.frame.DataFrame
 >>>list = [1]
 >>>type(list.append('2'))
 NoneType

问题就是list.append方法返回NoneType。至于更进一步的为什么,有待探究。

3.解决方案
①对于dataframe,还是要采取下面的形式

df = df.append(data)

这样才能对df进行添加赋值,读者可以试一下,只用df.append(data)不能改变df的内存值。

②对于list,直接使用append方法,能够直接改变内存值。使用赋值的语法形式反而会报错。

list.append('1')

2019/9/29更新:
最近使用numpy时发现数组array追加时的特性,与list不同,与dataframe相似,特此增加。

import numpy as np
array_1 = np.array([1,3,4])
array_1 = np.append(array_1,1000)
print(array_1)

结果如下:

[   1    3    4 1000]

ok,总结到这里。

你可能感兴趣的:(python学习)