Python 逻辑和数据帧在一起
我有一系列七个相同长度的数据帧 日期1看起来像:Python 逻辑和数据帧在一起,python,pandas,date,dataframe,Python,Pandas,Date,Dataframe,我有一系列七个相同长度的数据帧 日期1看起来像: 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 ... month day year
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
...
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
...
dates2看起来像:
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
...
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
...
等等,直到现在。我想创建一个数据框架,将它们合并在一起,但合并似乎不适合我
以下是我目前正在做的事情:
alldates = pd.concat([dates1,dates2,dates3,dates4], axis=0)
return alldates.dropna()
这是可行的,但一旦我加上Date5,Date6,Date7,它就会变得一团糟,因为这些数据帧有一些行的索引值与AllDate相同
这件事难倒我了。我还需要提供哪些信息?有没有更优雅的方法来解决这个问题?您可以像这样使用append:
dataframes = [dates1,dates2,dates3,dates4]
alldates = pd.DataFrame()
for dataframe in dataframes:
alldates = alldates.append(dataframe)
return alldates.dropna()
也许你只需要在连接后删除重复索引,只保留第一个索引,即
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])
这与我发布的原始解决方案一样有效,但它仍然给我留下了带有重复索引的行的问题。我得到的结果包括重复的行,比如两个不同的索引为9的行,而我想要的是“如果已经有索引为9的行,请不要用索引9追加这一新行”。@Bharath我不明白你的建议。如果使用append,那么它会将一个数据帧的所有行添加到另一个数据帧,如果他将首先删除Nan行,那么它应该可以工作,如果一个相同的行被复制,他可以在末尾使用drop_duplicates。当
l=[dates1,dates2]
时,它可以工作,但是当l=[dates1,dates2,dates3]
时,循环会在结果数据框中关闭date1中的值。您是否尝试删除重复项?更新后的解决方案有效吗?您提供的更新后的解决方案似乎有效。谢谢