" NoneType"在Python中创建列表列表时出现属性错误

时间:2018-06-09 20:26:19

标签: python list pandas dataframe nested-lists

因此,我尝试创建一个列表列表,然后我可以使用这些列表创建新数据帧,并在创建数据帧之前为每个列表创建一个新的数据帧,我想添加一个名称。

我已经复制了下面的代码("电台"指的是之前定义的气象站名称列表)。基本上,我正在迭代这个列表,从csv文件创建一个临时数据帧,然后清理数据帧(csv有一个无用的列和#34; ---"用于缺失值的字符串)。其余的数据都是数字的,我必须使用.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
...

我目前感到难过,并希望了解如何解决这个问题。我也非常感谢有关如何改进代码的任何想法。提前致谢!我希望我已经解释了我想要做的事情。

1 个答案:

答案 0 :(得分:1)

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

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