Превратить столбцы с не отличимыми значениями (из csv) в столбцы с уникальными / отличными значениями (сохраненными в новом csv) с помощью Pandas dataframe? - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу превратить мой .csv-файл с непонятными значениями под каждым заголовком столбца в .csv с разными значениями под каждым заголовком столбца (просто хочу знать все уникальные значения для каждого столбца огромного .csv-файла ). Пример:

Мой исходный .csv-файл виден (слева), который в Excel отображается как (см. Справа):

A,B,C,D                                        A       B       C       D
1,CEN,T2,56                                    1       CEN     T2      56
2,DECEN,T3,45                                  2       DECEN   T3      45
1,ONBEK,T2,84                                  1       ONBEK   T2      84
1,CEN,T1,59                                    1       CEN     T1      59
2,CEN,T1,87                                    2       CEN     T1      87

, где A, B, C и D являются заголовками столбцов с каждыми 5 значениями ниже.

Мой предпочтительный выходной файл .csv должен выглядеть следующим образом (см. слева, справа при открытии в Excel):

A,B,C,D                                        A       B       C       D
1,CEN,T2,56                                    1       CEN     T2      56
2,DECEN,T3,45                                  2       DECEN   T3      45
,ONBEK,T1,84                                           ONBEK   T1      84
,,,59                                                                  59
,,,87                                                                  87

где A, B , C и D - заголовки столбцов, а под ними - только отдельные значения для каждого столбца из исходного .csv-файла.

Я попытался использовать Pandas dataframe для выполнения этой задачи, однако я не надеваю мне не удается получить предпочтительный результат (я застрял при объединении уникальных кадров данных каждого столбца, поскольку они имеют разную длину).

См. код ниже:

import pandas as pd

df = pd.read_csv(csv_file, encoding='utf-8') #read .csv in pandas dataframe

columnnames = list(df.columns)
print(columnnames)

df2 = pd.DataFrame()

for col in df:
    result = df[col].unique()   #creates a list with distinct values
    print(result)
    output = pd.DataFrame(result)   #to transform the distinct list back into a dataframe
    print(output)
    df2.append(output) #tries to merge all the lists with unique values from the loop into the new dataframe df2
    df2.columns = columnnames
    print(df2)

df2.to_csv("c_" + csv_file, sep=',') #write pandas dataframe to .csv

Кто угодно Любые идеи? Поскольку я ищу разные значения в каждом столбце, каждый столбец может иметь разную длину. Предпочтительно эти ячейки после последней отдельной ячейки пусты (см. Предпочтительный вывод). Если это невозможно, их всегда можно заполнить 'NaN' или 'NULL', если необходимо.

1 Ответ

1 голос
/ 13 февраля 2020

Одно замечание: рамки данных не рассчитаны на столбцы данных различной длины, поэтому NaN значения для дополнения длины имеют смысл (как вы отметили в своем вопросе)

df

    A   B       C   D
0   1   CEN     T2  56
1   2   DECEN   T3  45
2   1   ONBEK   T2  84
3   1   CEN     T1  59
4   2   CEN     T1  87

new_df=pd.concat([pd.Series(df[i].unique()) for i in df.columns], axis=1)

new_df.columns=df.columns

new_df

    A   B       C   D
0   1.0 CEN     T2  56
1   2.0 DECEN   T3  45
2   NaN ONBEK   T1  84
3   NaN NaN     NaN 59
4   NaN NaN     NaN 87
...