Python: анализ CSV путем объединения всех значений ключа в 1 строку и сохранения нового кадра данных.

1

У меня есть CSV файл, который содержит пару ключ-значение, и меня просят объединить все значения, связанные с тем же ключом, в одну строку. Например:

Key,Col1,Col2,Col3
A, 1, A1, C9
A  2, C9, C1
A, 5, C1, C4
B, 7, A8, C5
D, 10 A2, C3

ОБНОВЛЕНЫ результаты, так как в первом ряду произошла ошибка\

Это должно привести к следующему: ЗАПИСИ для значения ключа кадра данных

Key,NewCol
A,A1:1:C9:C9:2:C1:C1:5:C4
B,A8:7:C5
D,A2:10:C3

Я начал делать это и читать CSV и проверять каждое чтение с соответствующим значением ключа, а затем корректировать значение значения, если ключ существует или нет.

import csv
df = []
with open('example.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
        if df.loc[df.key == row[0]]:
            exist_value  = df[value] 
            df[value]    = exist_value + row[2]+":"+row[1]+":"+row[3]
        else:
            df[key] = row[0]
            df[value] = row[2]+":"+row[1]+":"+row[3]

Вопрос: 1. Есть ли более эффективный способ сделать это? У меня есть большой файл для чтения, и я должен сделать больше обработки, например:

  • 0
    Вы собираетесь использовать панду DataFrame здесь? Ваш df это список Python ...
  • 0
    Можете ли вы объяснить логику более подробно?
Показать ещё 2 комментария
Теги:
csv
dataframe

1 ответ

0
import pandas as pd
df = pd.read_csv('waka.csv', header=None)
result = df.groupby(0).agg(lambda x: ':'.join(x.apply(str))).apply(lambda x: ':'.join(x), axis=1)
result

Изображение 174551

Как это устроено:

  • import pandas as pd импортировать библиотеку панд
  • df = pd.read_csv('waka.csv', header=None) читает CSV файл и записывает его в фрейм данных
  • df.groupby(0) сгруппировать по столбцу 0 (у вас нет заголовков, поэтому вы должны использовать индексы столбцов
  • agg(lambda x: ':'.join(x.apply(str))) объединяет все строки в каждом сгруппированном блоке
  • apply(lambda x: ':'.join(x), axis=1) объединяет все столбцы в новой полностью содержащей строке в одну полностью содержащую ячейку

Результатом является объект Series с индексами, равными сгруппированным элементам.

  • 0
    Ваш результат не совсем корректен. столбцы в исходной строке представляют собой набор и должны быть включены как набор значений в указанном порядке. Будет ли способ манипулировать функцией панды, чтобы сделать это? Смотрите обновленный вывод.
  • 0
    @vumux есть способ сохранить набор columsn после ключа как набор вместо объединения их по оси.
Показать ещё 3 комментария

Ещё вопросы

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