我有(大致)以下格式的CSV文件:
Day | Asset Allocation
0 | NYSE:100+++FTSE100:143+++DAX30:94
1 | NYSE:103+++FTSE97:143+++DAX30:95
2 | NYSE:102+++DAX30:97
3 | NYSE:102+++DAX30:97+++STOXX:102
因此,所有资产都汇总在一列中,并以“+++”分隔。随着CSV文件的进展,列中资产的顺序可能会发生变化。我想将数据重新排列为以下格式:
Day | NYSE | FTSE | DAX | STOXX
0 | 100 | 143 | 94 | 0
1 | 103 | 143 | 95 | 0
2 | 102 | 0 | 97 | 0
3 | 102 | 0 | 97 | 102
最好,我希望能够在Python中完成它,因为我确实有一些先前的经验,并且可能能够更快地找到我的方法。但是,由于最终数据集可能包含数百万行,我当然可以采用任何其他方式来更有效地处理数据。
如果有人能指出我正确的方向,我将不胜感激。谢谢!
答案 0 :(得分:0)
您可以使用pandas
高效执行此操作。
此示例使用str.split
和正则表达式应用必要的格式。
import pandas as pd
import re
def formatter(t):
return re.sub('[0-9]','', t[0]), int(t[1])
def converter(x):
return dict(formatter(i.split(':')) for i in x.split('+++'))
# read file
df = pd.read_csv('file.csv', sep='|')
# apply manipulations
res = df[['Day']].join(df['Asset Allocation'].apply(converter).apply(pd.Series))\
.fillna(0).astype(int)
print(res)
Day DAX FTSE NYSE STOXX
0 0 94 143 100 0
1 1 95 143 103 0
2 2 97 0 102 0
3 3 97 0 102 102