重新索引仅对具有唯一值的Index对象有效:Pandas DataFrame Panel

时间:2017-07-19 21:22:45

标签: python pandas csv

我试图将一堆.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)

我已经看到用户遇到相同错误的问题,但这些问题的解决方案似乎与我的问题无关。任何帮助解决这个问题,或者想要更好的方法都会受到高度赞赏。

2 个答案:

答案 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