逻辑AND数据帧一起

时间:2017-11-26 12:42:10

标签: python pandas date dataframe

我有一系列七个数据帧,长度相同。

dates1看起来像:

   month  day  year
0     04   20  2009
1     04   20    09
2      4   20    09
3      4    3    09
4    NaN  NaN   NaN
5    NaN  NaN   NaN
6    NaN  NaN   NaN
7    NaN  NaN   NaN
8    NaN  NaN   NaN
...

dates2看起来像:

   month  day  year
0    NaN  NaN   NaN
1    NaN  NaN   NaN
2    NaN  NaN   NaN
3    NaN  NaN   NaN
4    Mar   20  2009
5    Mar   20  2009
6    Mar   20  2009
7    Mar   20  2009
8    Mar   20  2009
...

依此类推,直至日期7。我想创建一个将它们合并在一起的数据框,但合并似乎并不适合我。

这是我到目前为止所做的事情:

alldates = pd.concat([dates1,dates2,dates3,dates4], axis=0)
return alldates.dropna()

这样的工作,但是一旦我添加了dates5,dates6,dates7,它就会开始搞乱,因为这些数据帧的某些行的索引值与alldates相同。

我很难过。我需要提供哪些更多信息?是否有更优雅的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

也许您只需要在连接后删除重复索引,只保留第一个,即

alldates = pd.concat([dates1,dates2,dates3,dates4], axis=0).dropna()
alldates = alldates.loc[~alldates.index.duplicated(keep='first')]

print(alldates)

month  day  year
0     4   20  2009
1     4   20     9
2     4   20     9
3     4    3     9
4   Mar   20  2009
5   Mar   20  2009
6   Mar   20  2009
7   Mar   20  2009
8   Mar   20  2009

如果您尝试从其他数据帧填充nan值,则可以使用

adf = df.fillna(df2)

对于两个以上的数据帧

l = [dates1,dates2]

for i in range(len(l)-1):
    ndf = l[i]
    ndf = ndf.fillna(l[i+1])

答案 1 :(得分:1)

你可以尝试使用这样的追加:

dataframes = [dates1,dates2,dates3,dates4]
alldates = pd.DataFrame() 
for dataframe in dataframes:
    alldates = alldates.append(dataframe)
return alldates.dropna()