Я хотел бы захватить несколько значений ячеек из файла CSV и записать в новый столбец

1

Итак, я новичок в Python. Я пытался применить то, что я узнал, к проблемам реального мира. Задача, которую я поставил себе, - это...

Я хочу захватить значения двух ячеек '01/01/2018 и '08/01/2018 'и распечатать их в новый файл csv.file под датами значения заголовка. Я также хочу создать новый столбец, который показывает значение, связанное с этой датой в исходном файле csv.

Любая помощь будет оценена по достоинству или точка в правильном направлении.

Оригинальная таблица

Hierarchy   | Dept   | Emp | Alpha | Bravo | Charlie | 01/01/2018 | 08/01/2018|
Hierarchy 1 | Dept 1 | JC  | h     | o     | l       | 0          | 2         |

Новая таблица

Hierarchy   |Dept   | Emp | Alpha | Bravo | Charlie    | Date       |Value |
Hierarchy 1 |Dept 1 | JC  | h     | o     | l          | 01/01/2018 | 0    |
Hierarchy 1 |Dept 1 | JC  | h     | o     | l          | 08/01/2018 | 2    |
  • 1
    Я бы посмотрел на панд, в частности функцию плавления.
  • 0
    @ChristianSloper Спасибо! Я посмотрю на это!
Показать ещё 2 комментария
Теги:
database
pandas
csv

3 ответа

0

После помощи вкладчиков я выполнил свою задачу, ниже - код, который я использовал! Благодаря сообществу за помощь!

"""
Transforms Data into Desired Format
"""

#import pandas module
import pandas as pd

#create variable where df = to data.csv
df = pd.read_csv('data.csv')

#create new variable for df.columns
cols = df.columns
#use .melt() function to complete data manipulation
transformed_df = pd.melt(df,
                         id_vars=cols[:6],
                         value_vars=cols[6:])

#Assert Data has been formatted correctly
print(transformed_df)

#create new csv file with new data
transformed_df.to_csv('melted_data.csv')

print("\nData has been Melted!") 
0

Как упоминает @ChristianSloper в своем комментарии, pd.melt предназначен для этого. В вашем случае это однострочный:

df
     Hierarchy    Dept Emp Alpha Bravo Charlie  01/01/2018  08/01/2018
0  Hierarchy_1  Dept_1  JC     h     o       l           0           2

pd.melt(df, 
        id_vars=df.columns[:-2], 
        value_vars=df.columns[-2:],
        var_name='Date', 
        value_name='Value')
     Hierarchy    Dept Emp Alpha Bravo Charlie        Date  Value
0  Hierarchy_1  Dept_1  JC     h     o       l  01/01/2018      0
1  Hierarchy_1  Dept_1  JC     h     o       l  08/01/2018      2
  • 0
    Вместо того, чтобы иметь фрейм данных в моем коде, я мог бы создать переменную, которая содержит мой файл CSV, и я называю это в pd.melt? Мне также нужно было бы записать новые данные в новый CSV-файл?
  • 0
    Да, сначала вам нужно прочитать в CSV с df = pd.read_csv(path_to_filename) . И вы можете сохранить результат pd.melt с помощью df2 = pd.melt(...) .
Показать ещё 3 комментария
0

Хорошо, я просто собираюсь пойти и предположить, что ваша таблица хранится в файле csv. Поэтому мы начнем с чтения, что в:

import pandas as pd

df = pd.read_csv('mytable.csv',sep='|')
pd.melt(df, 
       id_vars = ['Hierarchy   ', ' Dept   ', ' Emp ', ' Alpha ', ' Bravo ', ' Charlie '],
       value_vars=[' 01/01/2018 ',' 08/01/2018' ],
       var_name='Date', 
       value_name='Value')

Дает желаемый результат.

  • 1
    Эй, Крис, да, моя таблица хранится в CSV-файле, я попробую! Спасибо за вашу помощь!
  • 0
    Привет, Крис, я попробовал твоё решение, но оно вернулось с ошибкой, сказав, что значения в id_vars не были в columns . Сможете ли вы проверить мое git-репо и дать какие-нибудь советы по написанному мной коду? Ура! github.com/tdle/python
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню