Извлеките заголовки столбцов из ячейки и переставьте столбцы соответственно - PullRequest
0 голосов
/ 01 июня 2018

У меня есть файл 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, просто потому, что у меня есть некоторый предыдущий опыт и я мог бы найти свойпуть быстрее.Однако, поскольку окончательный набор данных, вероятно, будет содержать несколько миллионов строк, я, конечно, был бы открыт, чтобы использовать любой другой способ, который может обрабатывать данные более эффективно.

Буду очень признателен, если кто-нибудь укажет мне правильное направление.Спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете сделать это эффективно с помощью 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
...