将按日期排序的重复日期条目/值的Python列表转换为Pandas Dataframe

时间:2019-01-11 20:18:53

标签: python-3.x pandas datetime dataframe

如何根据日期将多个条目,日期和值的列表转换为Pandas Dataframe?例如:

给出以下列表:

list_ex = [{'Date': '12/31/2018', 'A': 'N/A'}, 
{'Date': '09/30/2018', 'A': '$5.75'}, 
{'Date': '06/30/2018', 'A': '$5.07'}, 
{'Date': '03/31/2018', 'A': '$3.27'}, 
{'Date': '12/31/2018', 'B': 'N/A'}, 
{'Date': '09/30/2018', 'B': '$56,576.00'}, 
{'Date': '06/30/2018', 'B': '$52,886.00'}, 
{'Date': '03/31/2018', 'B': '$51,042.00'}]

我们如何将其转换为如下所示的数据框(此外,此位置还会有4到5列):

        Date      A             B
0  2018-12-31     N/A         N/A
1  2018-09-30   $5.75         $56,576.00
2  2018-06-30   $5.07         $52,886.0
3  2018-03-31   $3.27         $51,042.00

我已经执行了多次搜索,但是找不到任何有助于此目的的示例。因此,我做了两次错误的尝试,但是并没有达到期望的输出。

尝试1:我将字符串值转换为日期,然后希望数据框的创建可以“自动”按日期分组,但是显然不起作用,因为每个新添加的内容都有新的索引。尝试1产生的df基本相同。

for i in list_ex:
i['Date'] = datetime.datetime.strptime(i['Date'], '%m/%d/%Y')

# Print Pandas dataframe
df = pd.DataFrame(list_ex) 
print(df)  

尝试2:按日期排序。显然这失败了,因为它只是按日期排序并保持相同的行数。

new_df = pd.sort_values('Date')

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

也许不是最简单或最有效的答案,但这是可行的。基本上,我创建了两个DataFrame对象,摆脱了所有的Nan,然后将它们合并到“ Date”列中。

import pandas as pd

list_ex = [{'Date': '12/31/2018', 'A': 'N/A'},
           {'Date': '09/30/2018', 'A': '$5.75'},
           {'Date': '06/30/2018', 'A': '$5.07'},
           {'Date': '03/31/2018', 'A': '$3.27'},
           {'Date': '12/31/2018', 'B': 'N/A'},
           {'Date': '09/30/2018', 'B': '$56,576.00'},
           {'Date': '06/30/2018', 'B': '$52,886.00'},
           {'Date': '03/31/2018', 'B': '$51,042.00'}]

df1 = pd.DataFrame(data=list_ex, columns=['Date', 'A']).dropna()
df2 = pd.DataFrame(data=list_ex, columns=['Date', 'B']).dropna()

df3 = pd.merge(df1, df2, on='Date')

print(df3)

祝你好运!

答案 1 :(得分:1)

您可以将// using initForReadingFromData produces no warning (but doesn't work - loadedCredentialIdentities is nil) : NSError *error = nil; NSKeyedUnarchiver *unarchiver = unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&error]; NSMutableArray *loadedCredentialIdentities = (NSMutableArray *)[unarchiver decodeObjectForKey:kStoredCredentialIdentities]; [unarchiver finishDecoding]; 方法与groupby()方法结合使用,如下所示:

.agg

输出:

df = pd.DataFrame(list_ex)

df = df.groupby('Date').agg({'A': lambda x: list(x)[0],
                             'B': lambda x: list(x)[1]}).reset_index()