【问题标题】:"NoneType" attribute error when creating list of lists in Python [duplicate]在 Python 中创建列表列表时出现“NoneType”属性错误 [重复]
【发布时间】:2018-06-09 20:26:18
【问题描述】:

所以,我正在尝试创建一个列表列表,然后我可以使用这些列表创建一个新的数据框,在创建数据框之前,我想为每个列表附加一个名称。

我在下面复制了我的代码(“站”是指先前定义的气象站名称列表)。基本上,我正在遍历这个列表,从 csv 文件创建一个临时数据框,然后清理数据框(csv 有一个无用的列和“---”字符串用于缺失值)。其余数据都是数字,我必须使用 .astype() 创建一个数据框,否则它会将数据读取为字符串。

为了进一步解释我的最终目标,我的目标是创建一个数据框,其中每一行都包含每个站点数据的列的平均值。我还想在末尾添加一个新列,这样每一行都包含它来自的电台的名称。

df = pd.DataFrame()
means = np.empty([5])
l = []

for j, station in enumerate(stations):
    temp = pd.read_csv('/Documents/data/' + station + 'data_clean.csv')
    temp = temp.drop('empty', axis=1).replace('---', np.nan)
    df = df.append(temp, ignore_index=True).astype({'tmax': np.float32,'tmin': np.float32,'af': np.float32,'rain': np.float32,'sun': np.float32})   

    # this line is to select the data for the spring months, then drop the (now unneeded) month and year columns
    df = df.loc[df['mm'].isin([3,4,5])].drop(['mm','yyyy'], axis=1)
    df = df.dropna()


    # Here, I am trying to create a list of the means for each column. 
    # Then I want to append this list to list l
    l1 = np.empty([5])
    for i, col in enumerate(list(df)):
        means[i] = df[col].mean()

    l2 = means.tolist()
    l = l.insert(j, l2)
    # I have also tried "l = l.append(l2)", which gave me the same error below

spring = pd.DataFrame(data=l)

当我运行它时,我收到以下错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-80-227816ee4fc9> in <module>()
     15 
     16     l2 = means.tolist()
---> 17     l = l.insert(j,_list)
     18 
     19     spring = pd.DataFrame(data=l)

AttributeError: 'NoneType' object has no attribute 'insert'

我的最终输出目标是如下所示的数据框:

   tmax   tmin   af     rain   sun   station
0  mean0  mean0  mean0  mean0  mean0 station_name0
1  mean1  mean1  mean1  mean1  mean1 station_name1
2  mean2  mean2  mean2  mean2  mean2 station_name2
...

我目前很困惑,如果有任何关于如何解决此问题的想法,我将不胜感激。我也很感激关于如何改进代码的任何想法。提前致谢!我希望我已经足够清楚地解释了我想要做的事情。

【问题讨论】:

  • 你不需要将列表等同于函数,它应该是l.append(...)l.insert(...)
  • list.append()list.insert() 返回 None

标签: python list pandas dataframe nested-lists


【解决方案1】:

list.insert()list.append()就地修改列表并返回None。看这个例子:

>>> l = []
>>> print(l.insert(0, 'foo'))
None
>>> l
['foo']
>>> print(l.append('bar'))
None
>>> l
['foo', 'bar']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多