如何根据日期将多个条目,日期和值的列表转换为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')
感谢您的时间。
答案 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()