Python 使用Pandas dataframe将具有非不同值(来自csv)的列转换为具有唯一/不同值(保存在新csv中)的列?

Python 使用Pandas dataframe将具有非不同值(来自csv)的列转换为具有唯一/不同值(保存在新csv中)的列?,python,pandas,csv,unique,distinct,Python,Pandas,Csv,Unique,Distinct,我想将每个列标题下具有非不同值的.csv文件转换为每个列标题下具有不同值的.csv文件(只想知道大型.csv文件中每个列的所有唯一值)。例如: 我的初始.csv文件可见(左),在Excel中显示为(见右): 其中A、B、C和D是列标题,下面各有5个值 我首选的输出.csv文件应该如下所示(请参见左侧,在Excel中打开时右侧): 其中A、B、C和D是列标题,其下仅包含原始.csv文件中每列的不同值 我尝试使用Pandas数据帧来执行这项任务,但是我没有获得我的首选输出(我被困在将每列的唯一数据帧

我想将每个列标题下具有非不同值的.csv文件转换为每个列标题下具有不同值的.csv文件(只想知道大型.csv文件中每个列的所有唯一值)。例如:

我的初始.csv文件可见(左),在Excel中显示为(见右):

其中A、B、C和D是列标题,下面各有5个值

我首选的输出.csv文件应该如下所示(请参见左侧,在Excel中打开时右侧):

其中A、B、C和D是列标题,其下仅包含原始.csv文件中每列的不同值

我尝试使用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
值最有意义(如您在问题中所述)


要明确的是,您试图将所有列值彼此完全解耦,但仍将数据作为列包含?每个列都是独立的,对于每个列,我只希望保留不同的值。因此,我可以在“A”列中说/看到“A”,只有这个和这个以及这个值存在;在“B”列中,仅存在此值和此值。。。等等。。列之间没有关系,只想保留每列的不同值。只想再次检查这是您想要的。如果您只想要唯一值,为什么要保留输出的CSV格式?只是为了以后能够在Excel中打开它。检查完不同的值后,我想用其他值替换其中的一些值(如果必要的话)(我可能会在excel中这样做,因为这需要更多的实践,我还不知道)。这只是我正在研究的一个小例子。太好了!当保存到.csv时,NaN会留下一个空单元格(这正是我想要的)!很高兴我能按照你的要求为你解答这个问题,尽管我对这个应用程序有保留意见,哈哈。您在评论中说“我可能会在excel中使用,因为它更易于操作”,如果您已经在数据框架中拥有数据,我鼓励您尝试在python生态系统中使用一些东西,因为如果您系统地使用它,它可能同样强大,如果不是更强大,您是对的,对于很多事情来说,Python的功能要强大得多,但正如我仍在学习的那样,需要花费相当长的时间才能使代码准确无误,因此对于数据库中的个别情况,在Excel中手动执行某些操作比在Python中硬编码要快。当然,我们的目标是尽可能多地使用Python来提高我的编程技能。如果它有效,它将是辉煌和快速的。如果你愿意,你也可以帮助这个吗?(这是对这个问题的补充,我今天已经为此挣扎了一段时间):
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
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
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