从单元格中提取列标题并相应地重新排列列

2024-06-17 15:04:08 发布

您现在位置: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来做这件事,因为我确实有一些以前的经验,也许能够更快地找到自己的方法。然而,由于最终的数据集可能包含数百万行,我当然愿意采用任何其他能够更有效地处理数据的方法

如果有人能给我指出正确的方向,我将不胜感激。谢谢


Tags: 文件csv数据方法格式资产asset汇总
1条回答
网友
1楼 · 发布于 2024-06-17 15:04:08

您可以使用pandas高效地完成这项工作

本例使用str.split和regex应用必要的格式

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

相关问题 更多 >