python - 从单元格中提取列标题并相应地重新排列列
问题描述
我有一个(大致)以下格式的 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 中做到这一点,因为我确实有一些先前的经验,并且可能能够更快地找到我的方法。但是,由于最终数据集可能包含数百万行,我当然愿意采用任何其他可以更有效地处理数据的方式。
如果有人能指出我正确的方向,我将不胜感激。谢谢!
解决方案
您可以使用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
推荐阅读
- bitbucket - Bitbucket 管道,步骤之间的工件
- python - 用给定起始位置和长度的空格替换字符或数字
- discord.net - 在 discord.net 2.0 中发布嵌入问题
- css - 为什么设置为0px 0px 0px 0px时这个盒子阴影不消失
- java - Java - 在BT的前序遍历中返回节点x之后访问的节点
- java - JPA、Wildfly 14 和 PostgreSQL
- c# - 从 c# 传递 oracle 查询
- input - ExUnit.CaptureIO 仍然等待多个 IO.read 调用的输入
- c# - 如果记录存在,如何转到下一页?
- graph-theory - Java Jung Graph 聚类返回非直观聚类