【发布时间】:2020-02-13 19:24:11
【问题描述】:
我想将每个列标题下方具有非不同值的 .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 数据框来执行此任务,但是我无法获得我喜欢的输出(我坚持将每列的唯一数据框合并在一起,因为它们具有不同的长度)。
请看下面的代码:
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' 填充。
【问题讨论】:
-
明确地说,您是在尝试将所有列值彼此完全分离,但仍将数据作为列包含?
-
好吧,每一列都独立于另一列,对于每一列,我只想保留不同的值。所以我可以说/看到'在'A'列中,只有这个和这个和这个值存在;在“B”列中,仅存在 this 和 this 和 this 值; ...等等等等..列之间没有关系,只是想保持每列的不同值。
-
只是想仔细检查一下这就是你想要的
-
如果您想要的只是唯一值,为什么还要保留该 CSV 格式的输出?
-
只是为了以后能够在 Excel 中打开它。在检查了不同的值之后,我想用其他值替换其中的一些(如果需要)(我可能会在 excel 中这样做,因为它需要更多的动手,还不知道)。这只是我正在研究的一个小例子。
标签: python pandas csv unique distinct