关于read\u csv和str dtyp的问题

2024-04-26 13:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的文本文件,其中列的格式如下:

1255 32627 some random stuff which might have numbers 1245

1.我想用read_csv给我一个有三列的数据框。前两列应该是数据类型uint32,第三列只是在字符串中包含后面的所有内容。也就是说,上面的行应该分成125532627some random stuff which might have numbers 1245。例如,此示例不执行此操作,但至少显示了数据类型:

    pd.read_csv("foo.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str})

2.我的第二个问题是关于str数据类型。如何它使用了很多内存,如果我知道一个字符串的最大长度,我可以减少吗?你知道吗


Tags: csv字符串whichreadhavenprandomsome
2条回答
  1. 你需要使用pd.read_csv()有什么原因吗?下面的代码很简单,可以根据需要轻松修改列值。你知道吗

    from numpy import uint32
    from csv import reader
    from pandas import DataFrame
    
    file = 'path/to/file.csv'
    with open(file, 'r') as f:
        r = reader(f)
        for row in r:
            column_1 = uint32(row[0])
            column_2 = uint32(row[1])
            column_3 = ' '.join([str(col) for col in row[2::]])
    
        data = [column_1, column_2, column_3]
        frame = DataFrame(data)
    
  2. 我不明白这个问题。你认为你的弦会很长吗?32位Python安装限制为2-3GB长的字符串。一个64位的安装要大得多,只受系统内存的限制。

你可以用系列str.cat方法,其文档可用here

df = pd.read_csv("foo.txt", sep=' ', header=None)

# Create a new column which concatenates all columns
df['new'] = df.apply(lambda row: row.iloc[2:].apply(str).str.cat(sep = ' '),axis=1)
df = df[[0,1,'new']]

不确定第二个问题的确切含义,但如果要检查内存中字符串的大小,可以使用

import sys
print (sys.getsizeof('some string'))

抱歉,我不知道知道最大长度如何帮助您节省内存,以及这是否可行

相关问题 更多 >