如何通过numpy在每行中加载不同数量的字符串元素

4daJKong

我有一个这样的数据集(0:5行),每行都有不同数量的元素,例如2,3 ...

whole milk,margarine
yogurt,brown bread,coffee
pork,yogurt,coffee
bottled water,bottled beer
whole milk
salty snack

我试过了

gro_arr = np.genfromtxt("groceries.csv", dtype=str, delimiter=",")

但它显示了

Some errors were detected !
    Line #2 (got 3 columns instead of 4)
    Line #3 (got 1 columns instead of 4)
    Line #6 (got 5 columns instead of 4)
    Line #7 (got 1 columns instead of 4)

怎么解决呢?

密码

您可以通过两种不同的方式在线阅读

  1. 将每一行拆分为该行中的内容数。
  2. 将拆分后的行的内容存储到填充的numpy数组中。

我使用了必要的方法制作了一个类,可在几行中完成。因此,您可以按原样应用它,而无需对其进行任何更改。

s = """whole milk,margarine
yogurt,brown bread,coffee
pork,yogurt,coffee
bottled water,bottled beer
whole milk
salty snack
"""

tc = TextToColumns(file = 'source.txt', 
                   sep = ',', 
                   text2columns = True, 
                   savedata = False, 
                   usedummydata = True, 
                   dummydata = s)
tc.make_dummydata()
tc.toarray()

输出

array([['whole milk', 'margarine', ''],
       ['yogurt', 'brown bread', 'coffee'],
       ['pork', 'yogurt', 'coffee'],
       ['bottled water', 'bottled beer', ''],
       ['whole milk', '', ''],
       ['salty snack', '', '']], dtype='<U13')

import numpy as np
import os

class TextToColumns(object):
    """Reads in text data and converts text into 
    columns using user specified separator.

    Parameters
    ----------
    file: path to the file
    sep: (str) separator. Default: ","
    text2columns: (bool) if True, adds empty strings as a padding to create a 
                         2D array. Default: True
    savedata: (bool) if True, saves the data read-in after splitting with the 
                     separator, as a part of the object. Default: False
    usedummydata: (bool) if True, uses dummy data to write to a file.
                         Default: False
    dummydata: (str) the string to use as dummy data.
                         Default: ''

    Example:
    # test-data
    s = '''whole milk,margarine
    yogurt,brown bread,coffee
    pork,yogurt,coffee
    bottled water,bottled beer
    whole milk
    salty snack
    '''
    # Text-to-column transformation 
    tc = TextToColumns(filename = 'source.txt', 
                       sep = ',', 
                       text2columns = True, 
                       savedata = False, 
                       usedummydata = True, 
                       dummydata = s)
    tc.make_dummydata()
    tc.toarray() 
    # Uncomment next line to clear any dummy data created
    # tc.clear_dummydata() 
    """
    def __init__(self, file, 
                 sep: str = ',', 
                 text2columns: bool = True, 
                 savedata: bool = False, 
                 usedummydata: bool = False, 
                 dummydata: str=''):
        self.file = file # 'source.txt'
        self.sep = sep
        self.text2columns = text2columns
        self.savedata = savedata
        self.usedummydata = usedummydata
        self.dummydata = dummydata

    def __repr__(self):
        return "TextToColumns object"

    def make_dummydata(self, dummydata=''):
        """Save a string as a file to use as dummy data.
        """
        s = """whole milk,margarine
            yogurt,brown bread,coffee
            pork,yogurt,coffee
            bottled water,bottled beer
            whole milk
            salty snack
            """ 
        if (self.dummydata == ''):
            self.dummydata = s       
        if (dummydata == ''):
            dummydata = self.dummydata        

            with open(self.file, 'w') as f:
                f.write(dummydata)

    def clear_dummydata(self):
        if os.path.isfile(self.file):
            os.remove(self.file)            

    def readlines(self):
        return self.toarray()        

    def read_file(self):
        if os.path.isfile(self.file):
            with open(self.file, 'r') as f:
                lines = f.readlines()
            return lines
        else:
            raise ValueError('Invalid file path.')

    def split_lines(self, lines=None):
        data = []
        self._max_length = 0
        if lines is None:
            lines = self.read_file()
        for line in lines:
            linedata = [e.strip() for e in line.split(sep)]
            length = len(linedata)
            if (length > self._max_length): 
                self._max_length = length
            #print(linedata)
            if length > 0:
                data.append(linedata)
        if self.savedata:
            self.data = data
        return data

    def toarray(self, data=None):
        if data is None:
            data = self.split_lines()
        padded_data = []
        if self.text2columns:
            for line in data:
                padded_data.append(line + ['']*(max_length - len(line)))
            if self.savedata:
                self.padded_data = padded_data
            return np.array(padded_data)
        else:
            return data

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每行不同数量字符串的 Python 列表

来自分类Dev

如何通过do函数拆分特定列中不同数量的字符串

来自分类Dev

如何在片段中加载字符串数组?

来自分类Dev

如何通过终端在 Ruby 中加密/解密字符串?

来自分类Dev

在JTable列中加载字符串

来自分类Dev

无法在 XmlDocument 中加载字符串

来自分类Dev

R:如何将具有不同元素数量的字符串向量拆分为多个向量?

来自分类Dev

是否可以在不同的连接字符串中加载相同的上下文?

来自分类Dev

如何替换通过属性加载的字符串中的空格

来自分类Dev

如何在Java中进行循环,以在每行上打印稍有不同的字符串?

来自分类Dev

每行基于条件的不同子字符串

来自分类Dev

在每行的开头添加一个不同的字符串

来自分类Dev

如何使用LoadHTMLString方法在WebView中加载大HTML字符串?

来自分类Dev

如何从打印的数据帧字符串中加载数据帧?

来自分类Dev

在字符串数组中加载.text文件

来自分类Dev

在Hive数据输入中加载子字符串

来自分类Dev

在iOS swift中加载HTML字符串(UIWebView除外)

来自分类Dev

是否可以通过字符串替换在asp.net MVC 5中的控制器中加载部分视图

来自分类Dev

创建具有不同数量字符的子字符串

来自分类Dev

如何获取“字符串”(?)的数量并打印

来自分类Dev

在字符串数组中加载字符串的有效地址?

来自分类Dev

如何打印字符串中每行的行号?

来自分类Dev

如何从字符串每行输出一个单词

来自分类Dev

如何为每行添加随机字符串?

来自分类Dev

计算不包含某些字符串的列表元素的数量

来自分类Dev

计算不包含某些字符串的列表元素的数量

来自分类Dev

计算JSON字符串中的元素数量

来自分类Dev

如何在R数据帧中用零/ NA替换每行中一定数量的元素(每行不同)?

来自分类Dev

如何从字符串/字节数组或任何其他容器中加载私钥/公钥

Related 相关文章

  1. 1

    每行不同数量字符串的 Python 列表

  2. 2

    如何通过do函数拆分特定列中不同数量的字符串

  3. 3

    如何在片段中加载字符串数组?

  4. 4

    如何通过终端在 Ruby 中加密/解密字符串?

  5. 5

    在JTable列中加载字符串

  6. 6

    无法在 XmlDocument 中加载字符串

  7. 7

    R:如何将具有不同元素数量的字符串向量拆分为多个向量?

  8. 8

    是否可以在不同的连接字符串中加载相同的上下文?

  9. 9

    如何替换通过属性加载的字符串中的空格

  10. 10

    如何在Java中进行循环,以在每行上打印稍有不同的字符串?

  11. 11

    每行基于条件的不同子字符串

  12. 12

    在每行的开头添加一个不同的字符串

  13. 13

    如何使用LoadHTMLString方法在WebView中加载大HTML字符串?

  14. 14

    如何从打印的数据帧字符串中加载数据帧?

  15. 15

    在字符串数组中加载.text文件

  16. 16

    在Hive数据输入中加载子字符串

  17. 17

    在iOS swift中加载HTML字符串(UIWebView除外)

  18. 18

    是否可以通过字符串替换在asp.net MVC 5中的控制器中加载部分视图

  19. 19

    创建具有不同数量字符的子字符串

  20. 20

    如何获取“字符串”(?)的数量并打印

  21. 21

    在字符串数组中加载字符串的有效地址?

  22. 22

    如何打印字符串中每行的行号?

  23. 23

    如何从字符串每行输出一个单词

  24. 24

    如何为每行添加随机字符串?

  25. 25

    计算不包含某些字符串的列表元素的数量

  26. 26

    计算不包含某些字符串的列表元素的数量

  27. 27

    计算JSON字符串中的元素数量

  28. 28

    如何在R数据帧中用零/ NA替换每行中一定数量的元素(每行不同)?

  29. 29

    如何从字符串/字节数组或任何其他容器中加载私钥/公钥

热门标签

归档