因此,我尝试创建一个列表列表,然后我可以使用这些列表创建新数据帧,并在创建数据帧之前为每个列表创建一个新的数据帧,我想添加一个名称。
我已经复制了下面的代码("电台"指的是之前定义的气象站名称列表)。基本上,我正在迭代这个列表,从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
...
我目前感到难过,并希望了解如何解决这个问题。我也非常感谢有关如何改进代码的任何想法。提前致谢!我希望我已经解释了我想要做的事情。
答案 0 :(得分:1)
list.insert()
和list.append()
就地修改列表并返回None
。见这个例子:
>>> l = []
>>> print(l.insert(0, 'foo'))
None
>>> l
['foo']
>>> print(l.append('bar'))
None
>>> l
['foo', 'bar']