【问题标题】:python csv file elements sorting and omit duplicatepython csv文件元素排序和省略重复
【发布时间】:2019-04-07 10:19:15
【问题描述】:

我编写了一个 python 脚本,它创建了一个包含三行数字的文本文件;

4.54 67.66 71.27 NaN ,4.54 304.53
9.06 14.08 39.56 NaN ,4.54 307.65
3.85 61.22 90.14 108.13 ,6.13 400.50

它是由不同文本文件产生的串联数据框。会有大量重复的数字,一些空元素等,所以我想按升序对它们进行排序并去掉所有重复。

对于排序,我尝试使用df.sort_values,但不知道如何对值进行排序;不考虑列名左右,逐行升序排列..

对于重复,我最初搜索 pandas 来处理这个问题(例如,df.drop_duplicates,转置数据然后选择重复/重新索引等);但我只想删除每行中的重复值...我已经被困在同一个地方好几天了,并使用 excel 手动删除重复项。有什么方法可以解决这个问题吗?

提前感谢您提供的任何帮助!

【问题讨论】:

  • 连续“摆脱”重复是什么意思?将重复单元格更改为null? NaN?
  • "转置数据" 你是说你这个文本文件是“向后”保存的,就像它是行/列而不是列//行?
  • 哦,等等。我认为他正在尝试删除是否需要将任何列分开。像每列一样作为一个表?我走远了吗?
  • @Jaba 我正在尝试删除每行的任何重复单元格/条目;被认为是分开的。对于“转置”部分,是的,它是从一组 txt 文件中提取的数据集(因此半决赛数据 = 列中的 concat),最终结果应保存在 3 行中;因此我把它全部转置了。对造成的任何混乱表示歉意!

标签: python pandas sorting duplicates


【解决方案1】:

如果列没有特定含义,则直接下拉到 NumPy 数组可能更容易。特别是,您可以使用pd.Series.drop_duplicates 逐行删除重复的条目,然后只需使用np.sort 执行排序:

In [152]: df
Out[152]:
      0      1      2       3     4       5
0  4.54  67.66  71.27     NaN  4.54  304.53
1  9.06  14.08  39.56     NaN  4.54  307.65
2  3.85  61.22  90.14  108.13  6.13  400.50

In [153]: np.sort(df.apply(lambda x: x.drop_duplicates(), axis=1))
Out[153]:
array([[  4.54,  67.66,  71.27, 304.53,    nan,    nan],
       [  4.54,   9.06,  14.08,  39.56, 307.65,    nan],
       [  3.85,   6.13,  61.22,  90.14, 108.13, 400.5 ]])

如果相关,您当然可以将结果转换回pd.DataFrame。如果愿意,也可以将逐行重复数据删除写成df.apply(pd.Series.drop_duplicates, axis=1)

【讨论】:

  • 感谢您的帮助。我已将此应用于脚本,结果显示第一行为“0,1”,其余(第 2 行和第 3 行)未排序。有什么建议吗?
  • 我不确定我是否遵循:对于一组不同的输入,您的意思是?在上面的示例中,对每一行进行了排序。
  • nvm,我已经整理了一些方法(假设它是由于 dtype 引起的)。非常感谢!!你是救生员:)!!!
猜你喜欢
  • 2019-04-06
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
相关资源
最近更新 更多