【发布时间】: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