我试图将一堆.csv文件的每个单元格平均导出为使用Pandas的单个平均.csv文件。
我没有问题,创建数据框本身,但当我尝试将其转换为Panel(即panel=pd.Panel(dataFrame)
)时,我收到错误:InvalidIndexError: Reindexing only valid with uniquely valued Index objects pandas pd.panel
每个csv文件的示例:
Year, Month, Day, Latitude, Longitude, Value1, Value 2
2010, 06, 01, 23, 97, 1, 3.5
2010, 06, 01, 24, 97, 5, 8.2
2010, 06, 01, 25, 97, 6, 4.6
2010, 06, 01, 26, 97, 4, 2.0
每个.csv文件来自网格化数据,因此它们具有相同数量的行和列,以及一些没有数据值(给定值为-999.9),我的代码片段在下面解决。
到目前为止我执行此操作的代码是:
june=[]
for csv1 in glob.glob(path+'\\'+'*.csv'):
if csv1[-10:-8] == '06':
june.append(csv1)
dfs={i: pd.DataFrame.from_csv(i) for i in june}
panel=pd.Panel(dfs)
panels=panel.replace(-999.9,np.NaN)
dfs_mean=panels.mean(axis=0)
我已经看到用户遇到相同错误的问题,但这些问题的解决方案似乎与我的问题无关。任何帮助解决这个问题,或者想要更好的方法都会受到高度赞赏。
答案 0 :(得分:0)
我有一个改变方法的建议。不是将每个DF转换成面板,只需将它们连接成一个大的DF,但每个DF都会给出一个唯一的ID。之后你可以通过ID进行groupby并使用mean()来获得结果。
看起来与此类似:
card
我希望它有所帮助,如果你还有任何问题,请告诉我。
答案 1 :(得分:0)
{{3}}
将pd.concat
与词典理解结合使用,取平均值超过1级。
df1 = pd.concat({f: pd.read_csv(f) for f in glob('meansample[0-9].csv')})
df1.mean(level=1)
Year Month Day Latitude Longitude Value1 Value 2
0 2010 6 1 23 97 1 3.5
1 2010 6 1 24 97 5 8.2
2 2010 6 1 25 97 6 4.6
3 2010 6 1 26 97 4 2.0