【问题标题】:Grouping data in a manner to export them as a CSV file以某种方式对数据进行分组以将它们导出为 CSV 文件
【发布时间】:2021-01-23 09:40:32
【问题描述】:

我有一个乱七八糟的数据,看起来像

10 130 31 11 106 27 12 105 31 14 100 24 15 60 24 16 70 25 17 65 18 18 60 23 20 48 21 22 28 14 24 12 18 25 2 14 26 1 10 30 0 9

我想以他们看起来像的方式对它们进行分组

10, 130, 31    
11, 106, 27   
12, 105, 31  
14, 100, 24  
15, 60, 24  
16, 70, 25  
...

我尝试将mystr.split() 放在一个列表中,然后定义以下函数将它们分组为 3:

def dataframing(df):
    nd = ["["]
    a = 0
    for data in df:
        if a < 3:
            nd += str(data)
            a = a+1
        else:
            nd+= str("],[")
            a = 0
    nd  += str("]")
            
    return nd

我很确定这会起作用,但是,我得到了以下输出:

['[',
 '1',
 '0',
 '1',
 '3',
 '0',
 '3',
 '1',
 ']',
 ',',
 '[',
 '1',
 '0',
 '6',
 '2',
 '7',
 '1',
 '2',
 ']',
 ',',
 '[',
 '3',
 '1',
 '1',
 '4',
 '1',
 '0',
 '0',
 ']',
 ',',
 '[',
 '1',
 '5',
 '6',
 '0',
 '2',
 '4',
 ']',
 ',',
 '[',
 '7',
 '0',
 '2',
 '5',
 '1',
 '7',
 ']',
 ',',
 '[',
 '1',
 '8',
 '1',
 '8',
 '6',
 '0',
 ']',
 ',',
 '[',
 '2',
 '0',
 '4',
 '8',
 '2',
 '1',
 ']',
 ',',
 '[',
 '2',
 '8',
 '1',
 '4',
 '2',
 '4',
 ']',
 ',',
 '[',
 '1',
 '8',
 '2',
 '5',
 '2',
 ']',
 ',',
 '[',
 '2',
 '6',
 '1',
 '1',
 '0',
 ']',
 ',',
 '[',
 '0',
 '9',
 ']']

我不知道为什么,但我想我的代码将每个数字都视为单独的数据,而不是将它们视为数字的一部分。现在我无法进一步前进,任何替代解决方案将不胜感激。

【问题讨论】:

  • 原始数据是什么格式的?带空格的字符串?
  • @User1010 实际上,它是 pdf 格式的,但是,当我将数据复制并粘贴到 excel 上时,它只填充了一个块,所有数据都用空格分隔

标签: python pandas export-to-csv


【解决方案1】:

尝试列表理解方法。也从不使用 list1 += list2。如果需要,Insead 使用list.extend()

l = "10 130 31 11 106 27 12 105 31 14 100 24 15 60 24 16 70 25 17 65 18 18 60 23 20 48 21 22 28 14 24 12 18 25 2 14 26 1 10 30 0 9"
l = l.split(" ")
l = [int(i) for i in l]

l = [10,130,31,11,106,27,12,105,31,14,100,24,15,60,24,16,70,25,17,65,18,18,60,23,20,48,21,22,28,14,24,12,18,25,2,14,26,1,10,30,0,9]

grouped = [l[i: i+4] for i in range(0,len(l), 4)]
# use 4 if you want to group in 4 or 3 if u want to group in 3
# for example to group in 3 use
# grouped = [l[i: i+3] for i in range(0,len(l), 3)]

输出

[[10, 130, 31, 11],
 [106, 27, 12, 105],
 [31, 14, 100, 24],
 [15, 60, 24, 16],
 [70, 25, 17, 65],
 [18, 18, 60, 23],
 [20, 48, 21, 22],
 [28, 14, 24, 12],
 [18, 25, 2, 14],
 [26, 1, 10, 30],
 [0, 9]]

【讨论】:

    【解决方案2】:

    假设输入是一个空格分隔的字符串,因为它出现在问题中,所以不需要使用 pandas,

    data = "10 130 31 11 106 27 12 105 31 14 100 24 15 60 24 16 70 25 17 65 18 18 60 23 20 48 21 22 28 14 24 12 18 25 2 14 26 1 10 30 0 9"
    
    # Split the string into an array
    data_array = data.split()
    
    print(data_array)
    
    
    # Chunking function, ref: https://stackoverflow.com/a/17483656/8458712
    def chunks(array, n):
        return [array[i:i+n] for i in range(0, len(array), n)]
    
    
    print(chunks(data_array, 3))
    

    输出,

    [['10', '130', '31'], 
     ['11', '106', '27'], 
     ['12', '105', '31'], 
     ['14', '100', '24'], 
     ['15', '60', '24'],
     ['16', '70', '25'], 
     ['17', '65', '18'], 
     ['18', '60', '23'], 
     ['20', '48', '21'], 
     ['22', '28', '14'], 
     ['24', '12', '18'],
     ['25', '2', '14'], 
     ['26', '1', '10'], 
     ['30', '0', '9']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多