使用 Pandas 数据框将具有 non-distinct 值的列(来自 csv)转换为具有 unique/distinct 值的列(保存在新的 csv 中)?

Turn columns with non-distinct values (from csv) into columns with unique/distinct values (saved in new csv) by using Pandas dataframe?

我想将我的 .csv-file 与每列下方 non-distinct 值 header 转换为每列下方具有不同值的 .csv header (只是想知道一个巨大的每一列的所有唯一值。csv-file)。一个例子:

我的初始 .csv-file 可见(左),在 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 是 header 列,每 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 是 header 列,它们下面只有每列与原始 .csv-file.

不同的值

我尝试使用 Pandas 数据帧来执行此任务,但是我无法获得我喜欢的输出(我一直坚持将每列的唯一数据帧合并在一起,因为它们的长度不同).

查看下面的代码:

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' 填充。

一个注意事项:数据帧不是为不同长度的数据列设计的,所以 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